按用户角色获取最终价格?

时间:2015-09-06 16:37:40

标签: sql database laravel eloquent laravel-5.1

我如何获得零售商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()函数是零售商声称的最后价格,但此代码只是示例。我该如何实现这一目标?

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

您正在寻找whereHas方法:

$query = Price::latest('id')->whereHas('user', function ($query) {
    $query->whereHas('role', function ($query) {
        $query->where('name', 'retailer');
    });
});

$price = $query->value('price');

这假设您已设置UserRolePrice模型之间的关系。