Я столкнулся с проблемой: я создал простую пользовательскую систему, чтобы пользователи могли следовать друг за другом. Я использую таблицу с именем follows
для хранения отношения. Я создал связь hasMany
в своем классе User
, и, получая результаты, получаю именно то, что ожидаю, однако, я хотел бы получить дополнительную информацию из таблицы пользователей, такую как имя пользователя, аватар, и т. д. Как мне это сделать?Laravel 5.2 Пользовательская система: hasMany Relation
follows
стол
// following_id is the person being followed
public function up()
{
Schema::create('follows', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('following_id')->unsigned();
$table->timestamps();
$table->unique(['user_id', 'following_id']);
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
User
класс
class User extends Authenticatable
{
// a user can have many followers
public function followers()
{
return $this->hasMany(Follow::class, 'following_id');
}
// a user may be following many people
public function following()
{
return $this->hasMany(Follow::class);
}
}
Метод, который я звоню в UsersController
, чтобы увидеть результаты
// route is /{username}/followers
public function followers($username)
{
$user = User::where('username', $username)->first();
// get the user's followers
$followers = $user->following;
return $followers;
}
Текущие результаты
[
{
id: 24,
user_id: 3,
following_id: 1,
created_at: "2016-02-13 11:42:59",
updated_at: "2016-02-13 11:43:02"
}
]
Однако, я хотел бы, чтобы они были следующими: где fredflintstone
- пользователь с ID 1; например.; пользователь, который следит за пользователем 3
[
{
id: 24,
user_id: 3,
following_id: 1,
following_username: 'fredflintstone',
created_at: "2016-02-13 11:42:59",
updated_at: "2016-02-13 11:43:02"
}
]
Я также создал Follow
модель, которая в настоящее время пуст. Я попытался добавить в него обратную связь belongsTo
, но это не сработало. Возможно, я сделал это неправильно?
do this User :: where ('username', $ username) -> with ('follow') -> first(); –
@AmirBar Не мог заставить это работать. – timgavin
почему? вам нужно предоставить больше информации, когда вы делаете dd (User :: where ('username', $ username) -> с ('follow') -> first()), что происходит? –