我有一个包含用户数据(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),但这对我的问题似乎没有用。
我也在这里阅读了几个问题,但遗憾的是无济于事。
答案 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()