Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Версия Laravel:5.2
Версия PHP: 5.6
Операционная система и её версия: Windows 10 x64
Задача, что должно происходить _в целом_, техническое задание:
Есть структура таблицы:
diagnostic_centers
id - integer
name - string
diagnostic_centers_prices
diagnostic_centers_id - integer
service_id - integer
price - integer
service_diagnostic_centers
id - integer
group_id - integer
name - string
group_service_diagnostic_centers
id - integer
name - string
Нужно получить коллекцию моделей с данными из всех таблиц через модель Diagnostic_center.
Делаю вот так:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Diagnostic_center extends Model
{
//
public function diagnostic_centers_prices()
{
return $this->hasMany('App\Diagnostic_centers_price', 'diagnostic_centers_id', 'id');
}
public function service_diagnostic_centers()
{
return $this->hasManyThrough(
'App\Service_diagnostic_center', 'App\Diagnostic_centers_price',
'service_id', 'id', 'id'
);
}
}
diagnostic_centers_prices получаю а вот service_diagnostic_centers - пустая коллекция.
Помогите разобраться, перечитал доку про связи несколько раз но так и не получается разобраться(((
Не в сети
Создайте модель, diagnostic_centers_prices и в ней отношение
public function service_diagnostic_centers()
{
return $this->hasMany('App\Service_diagnostic_centers', 'service_id', 'id');
}
И в запросе используйте ->with('method')
Например:
$result = Diagnostic_center::with('diagnostic_centers_prices.service_diagnostic_centers')->get();
Вообще отношения в моделях лучше называть сокращенно, например prices и services, тогда Ваш код выглядел бы приятнее
$result = Diagnostic_center::with('prices.services')->get();
Изменено Illia (06.04.2017 00:20:09)
Не в сети
Создайте модель, diagnostic_centers_prices и в ней отношение
public function service_diagnostic_centers() { return $this->hasMany('App\Service_diagnostic_centers', 'service_id', 'id'); }
И в запросе используйте ->with('method')
Например:
$result = Diagnostic_center::with('diagnostic_centers_prices.service_diagnostic_centers')->get();
Вообще отношения в моделях лучше называть сокращенно, например prices и services, тогда Ваш код выглядел бы приятнее
$result = Diagnostic_center::with('prices.services')->get();
Я использую метод load() для передачи свойств. Вот код промежуточной функции:
protected function getDiagnostics(){
$diagnostics = $this->diagnostics_rep->get('*');
if($diagnostics){
$diagnostics->load('diagnostic_centers_prices', 'service_diagnostic_centers');
}
return $diagnostics;
}
Добавил отношение в модель Diagnostic_centers_price. Прописал так:
if($diagnostics){
$diagnostics->load('diagnostic_centers_prices', 'diagnostic_centers_prices.service_diagnostic_centers');
}
Получаю ошибку "Call to undefined method Illuminate\Database\Query\Builder::service_diagnostic_centers()"
И так:
if($diagnostics){
$diagnostics->load('diagnostic_centers_prices', 'service_diagnostic_centers');
}
Все равно пустая коллекция приходит.
Изменено lahno (06.04.2017 09:41:39)
Не в сети
Страницы 1