Хорошо, поэтому я пытаюсь создать отношения, в которых пользователи могут следить за другими пользователями или следовать категориям. Я получил рекомендацию использовать отношения Polomorpic Many to Many. Сейчас я пытаюсь создать привязку - followee, но я не могу окунуться в голову, как настроить модели и контроллер.Как создать отношения следопытов, используя Полиморфные отношения Многие во многих отношениях с Laravel?
ТАБЛИЦЫ
Пользователи
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('email');
$table->string('password');
$table->string('first_name');
});
Категории
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('category');
});
Followables
Schema::create('followables', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->integer('user_id');
$table->integer('followable_id');
$table->string('followable_type');
});
МОДЕЛЬ
пользователь
class User extends Model implements Authenticatable
{
public function followers()
{
return $this->morphToMany('App\Followable', 'followable');
}
public function following()
{
return $this->morphedByMany('App\Followable', 'followable');
}
//Use to get id from Auth facade
public function getId()
{
return $this->id;
}
}
Followable
class Followable extends Model
{
protected $fillable = ['user_id'];
public function followable()
{
return $this->morphTo();
}
}
Отношение модель последователь Категории еще не существует, так что я оставлю, что один из сейчас.
CONTROLLER
FollowableController
class FollowableController extends Controller
{
public function followUser($followable_id){
$user_id = Auth::user()->getId();
$followee = User::find($followable_id);
$followee->followers()->create(['user_id' => $user_id]);
return redirect()->route('get.user', ['user_id' => $followable_id]);
}
}
Честно говоря, я немного смущен кода, который я создал. Это была некоторая копия и вставка без понимания 100% того, что я делаю. В любом случае, это создаст два записей в базе данных вида:
Followable
-------------------------------------------------
|Id | user_id | followable_id | followable_type |
-------------------------------------------------
|22 | 4 | NULL | NULL |
-------------------------------------------------
|23 | 0 | 22 | App\User |
-------------------------------------------------
followable_id является неправильно и, кажется, использует Id, который создается в Followable таблице вместо user_id из таблицы User.
Итак, как решить, так что есть только одна запись спасаемых в базу данных с правой followable_id?
У вас возникло это исправление? –
Я предполагаю, что на этот раз вам нужно явно добавить его в функцию 'follower()' relationship в модели User, то есть 'return $ this-> morphMany ('App \ Followable', 'followable', null, 'followable_id'); ' –