我有一个phone_models,phone_problems和一个phone_model_phone_problem数据透视表。数据透视表有一个额外的“价格”列。

手机型号:

class PhoneModel extends \Eloquent
{
    public function problems()
    {
        return $this->belongsToMany('RL\Phones\Entities\PhoneProblem')->withPivot('price');
    }
}

电话问题:
class PhoneProblem extends \Eloquent
{
    public function models()
    {
        return $this->belongsToMany('PhoneModel')->withPivot('price');
    }
}

我想做的是获取具有特定问题的特定手机的价格。

这就是我现在的方式,但是我觉得Laravel具有内置的Eloquent功能,我找不到用更简单的方式做到这一点:
$model = $this->phoneService->getModelFromSlug($model_slug);
$problem = $this->phoneService->getProblemFromSlug($problem_slug);

所有这些都是从他们的中选择特定的模型和问题。

然后我要做的就是凭这些凭证获取价格,如下所示:
$row = DB::table('phone_model_phone_problem')
->where('phone_model_id', '=', $model->id)
->where('phone_problem', '=', $problem->id)
->first();

所以现在我可以像$row->price这样获得价格,但我觉得需要一种更简单,更“Laravel”的方式来做到这一点。

最佳答案

当对Eloquent使用“多对多”关系时,结果模型将自动获得分配的pivot属性。通过该属性,您可以访问数据透视表列。
尽管默认情况下,枢轴对象中只有键。为了将列也放入其中,您需要在定义关系时指定它们:

return $this->belongsToMany('Role')->withPivot('foo', 'bar');

Official Docs

如果您需要更多与Eloquent配置关系的帮助,请告诉我。

编辑

要查询价格,请执行此操作
$model->problems()->where('phone_problem', $problem->id)->first()->pivot->price

关于php - 获取额外的数据透视表列laravel的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26566675/

10-11 03:20