我正试图在列表中有用户ID的监视列表中获取所有属性。
关系设置如下。
每个关注列表都与用户ID相关。每个属性都有一个监视列表ID。
我需要属于该用户的所有关注列表中的所有属性。
监视列表在创建时自动获取user_id。
以下是我的模特
监视列表
public function properties(){
return $this->hasMany('App\WatchedProperties');
}
public function user(){
return $this->belongsTo('App\User');
}
WatchedProperties
public function watchlist(){
return $this->belongsTo('App\Watchlist');
}
查询 获取每个列表中的所有书籍,忽略用户ID和列表ID
$Watchlists = WatchedBooks::all();
目前无论用户身份如何都会获得所有图书。
我需要所有用户列表中的所有书籍。
用户可以拥有多个列表 清单A. 清单B
等等 列表ID与用户ID相关的所有列表中的所有书籍。
这就是Watchlist DB的样子 documentation
这就是WatchedBooks DB的样子 WatchlistDB
答案 0 :(得分:1)
Laravel为此提供了一个漂亮的解决方案:您可以为用户模型添加->hasManyThrough
关系。您可以在the Laravel documentation about Eloquent relationships中找到有关此类关系的更多信息。
用户模型如下所示:
class User extends Model {
[...]
public function watchedBooks()
return $this->hasManyThrough('App\WatchedBook', 'App\Watchlist');
}
[...]
}
然后,您可以使用
获取与用户关联的所有WatchedBooks
$user->watchedBooks;
或
$user->watchedBooks()->yourBuilderQueryHere()->get();
答案 1 :(得分:0)
whereHas允许您查询关系。有关这方面的更多信息,请访问https://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence
$Watchlists = WatchedBooks::whereHas('watchlist', function($query) use ($user_id){
$query->where('user_id', $user_id)
})->get();
上面的脚本获取与用户拥有的监视列表相关联的所有WatchedBook($ user_id)。