Подтвердить что ты не робот

Получение значения дополнительной столбцовой таблицы столбцов laravel

У меня есть phone_models, phone_problems и сводная таблица phone_model_phone_problem. Стол поворота имеет дополнительную цену ".".

PhoneModel:

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

PhoneProblem:

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".

4b9b3361

Ответ 1

При использовании отношений Many to Many с Eloquent полученная модель автоматически получает атрибут pivot. Через этот атрибут вы можете получить доступ к столбцам сводной таблицы. Хотя по умолчанию в сводном объекте есть только ключи. Чтобы получить свои столбцы, вы должны указать их при определении отношения:

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

Официальные документы

Если вам нужна дополнительная помощь в настройке отношений с Eloquent, дайте мне знать.

Edit

Чтобы запросить цену, сделайте это

$model->problems()->where('phone_problem', $problem->id)->first()->pivot->price

Ответ 2

Чтобы получить данные из сводной таблицы:

$price = $model->problems()->findOrFail($problem->id, ['phone_problem'])->pivot->price;

Или, если у вас много записей с разной ценой:

$price = $model->problems()->where('phone_problem', $problem->id)->firstOrFail()->pivot->price;

К тому же.

Чтобы обновить данные в стержне, вы можете перейти NEW WAY:

$model->problems()->sync([$problemId => [ 'price' => $newPrice] ], false); 

Если для второго параметра установлено значение false, это означает, что вы не отсоединяете все другие связанные модели.

Или, по- старому

$model->problems()->updateExistingPivot($problemId, ['price' => $newPrice]);

И напомню:

Чтобы удалить:

$model->problems()->detach($problemId);

Чтобы создать новое:

$model->problems()->attach($problemId, ['price' => 22]);

Он был протестирован и доказан, работая в Laravel 5.1 .