Intereting Posts
Лучший способ конвертировать веб-страницу в pdf-изображение Ищете эквивалент array_map для работы с ключами в ассоциативных массивах Как поделиться содержимым моего веб-сайта на facebook Загрузка нескольких файлов в php CodeIgniter – Загрузка изображения через форму, сохранение местоположения изображения в базе данных Как получить тип поля базы данных в Laravel? Как определить пространство сервера для загруженного файла или нет? Вставить во все ячейки, когда записи содержат более одного PHP Если PHP mt_rand () использует более быстрый алгоритм, чем rand (), почему бы просто не изменить rand () для использования более новой реализации? FOSRestBundle: показать мое пользовательское сообщение об исключении Добавление пользовательского текста под кнопкой X, который удаляет элементы из корзины как я могу загрузить видео и сохранить его в папку в codeigniter? Часовой пояс Mysql по умолчанию Почему этот код pdo :: mysql разбивается на окна? Запустить php-скрипт в monit

получение значения дополнительной столбцовой таблицы столбцов 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».

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

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

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

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

редактировать

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

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

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

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