查询列表标识具有用户标识的所有位置

时间:2018-03-20 13:40:56

标签: laravel laravel-5

我正试图在列表中有用户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

2 个答案:

答案 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)。