Как создать отношения последователей, используя полиморфные отношения «многие ко многим» с Laravel?

Итак, я пытаюсь создать отношения, где пользователи могут следовать за другими пользователями или следовать категориям. Я получил рекомендацию использовать Polomorpic Много ко многим отношения. Прямо сейчас я пытаюсь создать последователь — последователь отношения, но я не могу обдумать, как настроить модели и контроллер.

ТАБЛИЦЫ

пользователей

        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();
}

}

Отношения последователей модели категории еще не существуют, поэтому я пока оставлю это.

КОНТРОЛЛЕР

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 является неправильно и, кажется, использует идентификатор, который создается в таблице Followable вместо user_id из таблицы User.

Итак, как решить, чтобы было сохраняется только одна запись в базу данных с right followable_id?

0

Решение

Я полагаю, вы используете неправильный метод. Я сделал что-то подобное, следуя примеру доктора Ларавела, и morphMany() было достаточно, так как ваш User может иметь много последователей, которые сами user так что вы можете иметь:

User модель:

public function followers()
{
return $this->morphMany('App\Followable', 'followable');
}

Затем вы можете установить user_id из контроллера (но не забудьте добавить его в fillable).

Надеюсь, поможет 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]