我如何获得零售商b@gmail.com(价格表中的第5行)的最后价格,条件是该角色='零售商'?
所以这是我简单的表格:
表用户(使用模型中默认关系的Entrust Role包)
__________________________
| id | email | password |
|-------------------------|
| 1 | a@g.com | 123 |
| 2 | b@g.com | 123 |
| 3 c@g.com | 123 |
| 4 d@g.com | 123 |
--------------------------
表角色(使用模型中具有默认关系的Entrust Role包)
______________
|id | name |
|--------------|
|1 | customer |
|2 | retailer |
----------------
表 role_user (使用模型中默认关系的Entrust Role包)
__________________
|id_user | id_role|
|------------------|
| 1 | 1 | -> a@gmail.com is a customer
| 2 | 2 | -> b@gmail.com is a retailer
| 3 | 1 | -> c@gmail.com is a customer
| 4 | 1 | -> d@gmail.com is a customer
------------------
以下是查询价格的棘手部分:
我有以下价格表(用户可以发布1个或更多价格。请看下面的关系):
____________________
|id| user_id| price |
|--------------------|
|1 | 1 | 10.00 | -> price claimed by a customer a@gmail.com
|2 | 2 | 5.00 | -> price claimed by a retailer b@gmail.com
|3 | 1 | 6.00 | -> price claimed by a previous customer a@gmail.com
|4 | 3 | 5.00 | -> price claimed by a customer c@gmail.com
|5 | 2 | 7.00 | -> price claimed by a previous retailer b@gmail.com //How to get this one? This is the last price claimed by the retailer.
|6 | 3 | 8.00 | -> price claim by a customer c@gmail.com
---------------------
我的价格模型中的关系:
class Price extends Model{
public function product()
{
return $this->belongsTo('App\Product');
}
public function user()
{
return $this->belongsTo('App\User');
}
我如何获得零售商b@gmail.com(价格表中的第5行)的最后价格,条件是该角色='零售商'?
目的是获得零售商声称的最后价格。
更新我的问题: 我想使用 $ products 变量从我的产品模型访问上一个零售商声明的价格。
我拥有的示例表产品:
_______________________________
|id | user_id| name |
|------------------------------
| 1 | 1 | Milk |
| 2 | 2 | Phone |
| 3 | 1 | computer |
| 4 | 1 | Banana |
------------------------------
我的 Product.php 模型关系:
class Product extends Model{
public function prices()
{
return $this->hasMany('App\Price');
}
}
所以,在我的 ProductController.php 中,我将$ 产品变量发送到视图中,如下所示:
class ProductController extends Controller
{
public function show($id)
{
$product = Product::where('id', '=', $id)->
return view('products.show')->with('product', $product);
}
}
在我看来 show.blade.php ,我循环浏览 $ product 变量,我可以显示产品的声明价格。
@foreach($product->prices as $price)
<li>Price claimed: {{$price->price. " " }} </li>
@endforeach
我想要像
这样的东西 $price_last = $product->prices()->where(role, 'retailer')->last().
dd($price_last);
last()函数是零售商声称的最后价格,但此代码只是示例。我该如何实现这一目标?
如果您需要更多信息,请与我们联系。
答案 0 :(得分:2)
您正在寻找whereHas
方法:
$query = Price::latest('id')->whereHas('user', function ($query) {
$query->whereHas('role', function ($query) {
$query->where('name', 'retailer');
});
});
$price = $query->value('price');
这假设您已设置User
,Role
和Price
模型之间的关系。