Eloquent选择基于外键的()

时间:2016-12-19 12:09:06

标签: laravel eloquent

我有一个包含用户数据(users)的表格和一张价格为prices的表格。 我的价格表可以包含多个价格pr。用户,因为我想保留历史数据。

我已将我的关系定义为一对一

$this->hasOne("App\Model\Price","userid","id")->orderBy("id","desc")->take(1);

允许我查看用户当前的价格。

我现在要做的是选择当前价格为100的每个用户,但我该怎么做?我知道我可以选择左连接,但是我阅读文档,没有左连接就应该可以。

我已经建立了一个伪查询来解释我之后的事情; User::with("price")->where("prices.price","100")->get();

我已阅读了文档(Eloquent: Querying relationships),但这对我的问题似乎没有用。

我也在这里阅读了几个问题,但遗憾的是无济于事。

2 个答案:

答案 0 :(得分:3)

你可以试试这个:

$currentPrice = 100;
$users = User::whereHas('price', function($query) use ($currentPrice) {
    $query->where('price', $currentPrice); // price is the field name
})
->with("price")->get();

由于每个用户只有一个以上的价格,因此您也可以声明另一种关系方法来获取所有价格模型而不是一个,您可以使用以下内容进行:

// In User model
public function prices()
{
    return $this->hasMany("App\Model\Price", "userid", "id");
}

在这种情况下,with::price将为您提供最后一条记录,with::prices将为您提供所有相关价格。因此,如果您愿意,那么您可以编写类似以下内容的内容,以便为所有用户提供所有相关价格({最新/当前)价格为100的用户:

$currentPrice = 100;
$users = User::whereHas('price', function($query) use($currentPrice) {
    $query->where('price', $currentPrice); // price is the field name
})
->with("prices") // with all prices
->get();

答案 1 :(得分:2)

您可以将èvent.preventDefault()whereHas()的组合用作:

with()