ララベル5.5でお気に入り登録機能を作成しております。
ログインしていない全てのユーザーがお気に入り登録できるようにしたいです。
下記のフォロー機能の場合のものを参考にティンカーでfavoriteできるようにしたいのですがエラーになってしまいます。
>>> use App\User // 今回はユーザーIDが1と2のユーザーを使ってテストしますが、任意のID番号でも問題ありません。 >>> $user1 = User::find(1) => App\User {#2871 // 中略 } >>> $user2 = User::find(2) => App\User {#2864 // 中略 } >>> $user1->follow($user2->id) => true >>> $user1->followings()->get() => Illuminate\Database\Eloquent\Collection {#2865 all: [ App\User {#2876 id: 2, // 中略 }, ], } >>> $user1->unfollow($user2->id) => true >>> $user1->followings()->get() => Illuminate\Database\Eloquent\Collection {#2880 all: [], }
モデルは2つあり、
Article
class Article extends Model { protected $fillable = ['content', 'user_id']; public function user() { return $this->belongsTo(User::class); } public function favorite_users() { return $this->belongsToMany(Article::class); } }
User
public function articles() { return $this->hasMany(Article::class); } public function favorites() { return $this->belongsToMany(User::class, 'favorites', 'user_id', 'article_id')->withTimestamps(); } public function favorite($articleId) { // 既にお気に入りしているかの確認 $exist = $this->is_favorite($articleId); if ($exist) { // 既にお気に入りしていれば何もしない return true; } else { // 未お気に入りであれば登録する $this->favorites()->attach($articleId); return false; } } public function unfavorite($articleId) { // 既に登録しているのか確認 $exist = $this->is_favorite($articleId); if ($exist) { $this->favorites()->detach($articleId); // 既にお気に入りしていればお気に入りを外す return true; } else { // 未お気に入りであれば何もしない return false; } } public function is_favorite($articleId) { return $this->favorites()->where('article_id', $articleId)->exists(); } }
まずモデルの書き方が間違っているのでしょうか...
回答2件
あなたの回答
tips
プレビュー