我有一个orders
表,一个items
表和一个名为item_order
的数据透视表,其中有两个自定义字段(price
,quantity
)。 Order
和Item
之间的关系是belongsToMany。我正在尝试返回ID为1
的所有项的计数,其中父项Order->status == 'received'
。对于我的一生,我不知道该怎么做。
class Order extends Model
{
public function items()
{
return $this->belongsToMany(Item::class)->withPivot('price', 'quantity');
}
}
class Item extends Model
{
public function orders()
{
return $this->belongsToMany(Order::class)->withPivot('price', 'quantity');
}
}
答案 0 :(得分:0)
尝试一下:
$total_quantity = Item::find(1) // getting the Item
->orders() // entering the relationship
->with('items') // eager loading related data
->where('status', '=', 'received') // constraining the relationship
->get() // getting the results: Collection of Order
->sum('pivot.quantity'); // sum the pivot field to return a single value.
此处的策略是找到所需的Item
,然后将与此状态为Order
的{{1}}的相关Item
获取到最终{{1} } ivot属性以获取单个值。
应该可以。
答案 1 :(得分:0)
考虑到您知道项目的function points(games) {
return games.map(game => {
let points = 0;
let item = game.split(':');
let x = item[0];
let y = item[1];
//compare x values against y values in items
if (x > y) {
points += 3;
}
if (x < y) {
points += 0;
}
if (x === y) {
points += 1;
}
return points;
}).reduce((sum, curr) => (sum += curr),0);
}
console.log(points(["1:0", "2:0", "3:0", "4:0", "2:1", "3:1", "4:1", "3:2", "4:2", "4:3"]));
,最有效的方法是直接查询id
表。我将为item_order
创建一个pivot model并定义ItemOrder
关系并执行以下操作:
belongsTo(Order::class)