gpt4 book ai didi

mysql - Laravel 查询生成器不会返回基于角色 = 客户的所有价格。只需返回 1 个价格

转载 作者:可可西里 更新时间:2023-11-01 09:03:57 25 4
gpt4 key购买 nike

我正在设计一个应用程序,零售商可以在其中添加具有初始价格的产品(例如存储在产品表中),然后客户可以索取从零售商处购买的产品的价格(此信息存储在价格表显示为示例)。然后零售商也可以更新/回收价格表中的价格。客户可以一次又一次地收回产品的价格。

因此,我有 2 个用户角色,分别是零售商和客户。我在模型中使用具有角色和用户之间默认关系的委托(delegate)角色包。在我接下来解释之前,这是我的简单数据库设计和所有工作示例(请随时要求包括任何内容):

=============== 我的数据库设计示例 ===============

用户

 __________________________
| id | email | password |
|-------------------------|
| 1 | a@g.com | 123 |
| 2 | b@g.com | 123 |
| 3 c@g.com | 123 |
| 4 d@g.com | 123 |
--------------------------

角色

  ______________
|id | slug |
|--------------|
|1 | customer |
|2 | retailer |
----------------

role_user

 __________________
|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 | product_id | price |
|----------------------------|
|1 | 1 | 1 |10.00 | -> price claimed by a customer a@gmail.com on product 1
|2 | 2 | 1 |5.00 | -> price claimed by a retailer b@gmail.com on product 1
|3 | 1 | 1 |6.00 | -> price claimed by a previous customer a@gmail.com on product 1
|4 | 3 | 1 |5.00 | -> price claimed by a customer c@gmail.com on product 1
|5 | 2 | 1 |7.00 | -> price claimed by a previous retailer b@gmail.com on product 1
|6 | 3 | 1 |8.00 | -> price claimed by a customer c@gmail.com on product 1

表格产品

 _____________________________________
|id | user_id| name | Price
|-------------------------------------
| 1 | 1 | Milk | 10.00
| 2 | 2 | Phone | 12.33
| 3 | 1 | computer | 33.44
| 4 | 1 | Banana | 33.22
--------------------------------------

=============== 我的模型关系 ===============

价格模型关系

class Price extends Model
{
public function product()
{
return $this->belongsTo('App\Product');
}

public function user()
{
return $this->belongsTo('App\User');
}
}

产品型号关系

class Product extends Model
{

public function prices()
{
return $this->hasMany('App\Price');
}
}

用户模型关系//一个用户可以申领1个或多个价格

class User extends Model
{
public function prices ()
{
return $this->hasMany('App\Price');
}
}

=============== 我的产品 Controller ===============

这是关于如何获取除零售商以外的所有客户的价格的棘手部分:

class ProductController extends Controller
{
public function show($id)
{
$product = Product::findOrFail($id);

// This query should return all price claimed by customers except retailer. But the problem is, it only return 1 row, the first row which the output is 10.00.

$query_customer =$product->prices()->whereHas('user', function ($q) {
$q->whereHas('roles', function ($q) {
$q->where('slug', 'customer');
});
});
$latest_price_by_customer= $query_customer->value('price');

dd($latest_price_by_customer);
//it just return 1 row: price 10.00

/* It should return the collection that I can do foreach statement. The output should be like this:

10.00
6.00
5.00
7.00
8.00

*/

}
}

上面 Controller 中的查询返回除零售商以外的客户要求的所有价格。但问题是,它只返回 1 行,输出为 10.00 的第一行。

它应该从价格表中输出客户要求的所有价格,如下所示:

10.006.005.007.008.00

有什么想法吗?

更新:

到目前为止,我更改了我的 Controller 代码:

   $product = Product::findOrFail($id); 
$query_customer =$product->prices()->whereHas('user', function ($q) {
$q->whereHas('roles', function ($q) {
$q->where('slug', 'customer');
});
});
$latest_price_by_customer= $query_customer->value('price');

dd($latest_price_by_customer);

为此:

    $product = Product::with('prices')->findOrFail($id);


$product_query= $product->prices()->where('product_id', $id) ->whereHas('user', function ($q) {
$q->whereHas('roles', function ($q) {
$q->where('slug', 'customer');
});
})->select('price')->get();


dd($product_query); //display collection and return the correct values
}

我这里有一个小问题:当循环遍历集合时

    foreach($product_query->prices as $pr)
{
// dd($pr);
// echo $pr->price . ' ___ ' ;
}

我在 ProductController.php 的第 72 行中遇到了 ErrorException 错误:

    Undefined property: Illuminate\Database\Eloquent\Collection::$prices 

但关系是存在的。

最佳答案

如果有人在寻找答案,这是返回集合而不是 1 行的正确查询:

$product = Product::with('prices')->findOrFail($id);
$product_query= $product->prices()->where('product_id', $id) ->whereHas('user', function ($q) {
$q->whereHas('roles', function ($q) {
$q->where('slug', 'customer');
});
})->select('price')->get();

foreach($product_query as $price)
{
echo $price->price;
}

关于mysql - Laravel 查询生成器不会返回基于角色 = 客户的所有价格。只需返回 1 个价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com