雄辩多对多关系的枢纽分析表字段

时间:2019-05-19 19:51:06

标签: php laravel laravel-5 eloquent relationship

我有一个orders表,一个items表和一个名为item_order的数据透视表,其中有两个自定义字段(pricequantity)。 OrderItem之间的关系是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');
    }
}

2 个答案:

答案 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)