Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет.
У меня на сайте есть следующие сущности:
Page — Страница, например "контакты"
id, name
К странице подключается Block, через отношение belongsToMany('App\Block')
Block - Блок, например "seo"
id, name
К блоку подключаются поля, через hasMany('\App\Field');
Field - Поле, например "keywords" и "description",
id, block_id, name
Один блок может подключатся к разным страницам и при этом в него должны подгружаться разные данные.
Для этого я хочу сделать еще одну сущность Data, в которой будут хранится данные полей блоков:
field_id, page_id, value
Выбрать страницу я пытаюсь примерно следующим запросом:
$data = Page::with('blocks.fields')->find(42);
Но при этом я не понимаю как создать отношение для подгрузки данных.
Что-бы их выбрать нужно поставить два условия: id поля и id страницы
Подскажите, какое отношение можно применить, что бы создать такую выборку?
Спасибо!
Не в сети
Попробую переформулировать вопрос:
Есть следующие модели:
class Page extends Model {
protected $with = ['blocks'];
public function blocks() {
return $this->belongsToMany('App\Block');
}
}
class Block extends Model {
protected $with = ['fields'];
public function fields() {
return $this->hasMany('App\Fields');
}
}
class Field extends Model {
protected $with = ['data'];
public function data() {
return $this->hasOne('\App\Data');
}
}
И есть контроллер в котором я выбираю данные:
public function get() {
$page_id = 1;
$data = Page::find($page_id);
}
В результате получаю такую структуру:
Страница
- Блок 1
- Поле 1
- Тестовые данные
- Поле 2
- Еще данные
- Блок 2
- Поле 1
- Другие данные
Блок может принадлежать нескольким страницам.
Конкретное поле принадлежит конкретному блоку.
А вот данные, хранящиеся в этом поле должны быть привязаны к полю и к странице одновременно.
То есть мне нужо передать в функцию data() модели Field переменную $page_id
Что бы в результате получилось примерно так:
public function data() {
return $this->hasOne('\App\Data')->where('page_id', '=', $page_id);
}
Не в сети
Страницы 1