Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Создайте модель, 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();
Я понимаю вашу логику, построения БД, но смею предположить, что она не верна, ибо нельзя мешать в кучу цвета и размеры. Одна таблица - это одна сущность, и размеры, должны быть в отдельной таблице, а цвета в отдельной. В идеале я бы еще и отделил в отдельную таблицу единицы измерения размеров (см, дюймы и прочие). То есть чтобы в таблице размеров было только число, и создать промежуточную таблицу размеров и единиц измерений.
Если Вы хотите подогнать ответ под этот, тогда нужно чтобы запрос был
Goods::with('Filters.Colors', Filters.Sizes')->find(1);
То есть у Вас должна модель фильтров иметь отношение один ко многим цветам и один ко многим размерам. А модель Goods должна иметь отношение - many to many к фильтрам. Ибо один товар может иметь несколько фильтров, и один фильтр, может относится к нескольким товарам.
Отсюда вытекает, что нужно:
- переименовать связующую таблицу attribute_good на filter_good;
- создать таблицу размеров sizes и ее модель;
- создать таблицу размеров colors и ее модель;
И будет вам такой ответ как в джсоне.
Проблему решил вот таким костылем:
if (!Schema::hasTable('cards')) {
Schema::create('cards', function (Blueprint $table) {
$table->engine = 'InnoDB';
// table fields
});
}
Кто знаком с решением элегантнее, был бы рад прочитать о нем.
В ларавел можно реализовать.
Нужно создать модель для таблицы Attributes и модель для Filters
в Attributes прописать отношение
public function filter()
{
return $this->hasOne('App\Models\Filter');
}
В запросе из БД должен присутствовать метод ->with('filter')
тоесть примерно так:
$result = Attribute::where('id', '=', 1)->with('filter')->first();
Добрый день.
Кратко о движке: laravel 5.2, БД: MySQL
Прелюдия:
1. Есть файлы миграций, которые все были успешно мигрированы в БД.
2. Сайт наполнялся-наполнялся, база растет.
3. Кто-то сменил название файла миграций (например 2016_01_17_create_cards.php на 2016_01_01_create_cards.php), а возможно и название класса тоже было изменено.
4. При добавлении новой миграции и попытке php artisan migrate выпадает ошибка SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'cards' already exists, тоесть скрипт миграции видит, что есть новый файл, не такой как был ранее и пытается создать и эту таблицу, но она уже существует.
Вопрос: Куда регистрируются миграционные файлы, чтобы добавить этот файл, и чтобы сайт не пытался создать эту таблицу снова? Сделать php artisan migrate:reset нельзя, так-как в базе уже много данных. Разве что, выгрузить все и заново перезалить базу, но должен же быть выход без жесткого перебития базы?