Объединение двух моделей в один вызов базы данных - laravel - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть 2 модели, которые я звоню через все:

$blocks = Block::all();
$cats = BlockCategory::all();

С блоком связана категория, и я хочу связать данные, чтобы я мог отобразить все категории, имеющие определенные блоки,Я надеюсь, что объясняю это правильно.

так что я могу позвонить:

@foreach($cats as $cats)
    {{$cats->title}}
    @foreach($cats->blocks as $blocks)
         {{$block->title}}
    @endforeach
@endforeach

есть идеи, как объединить данные?Я в основном строю меню, если это помогает.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

У вас есть несколько вариантов того, как подойти к этому.

Определите ваши отношения следующим образом:

Модель

public function blocks()
{
    return $this->hasMany('App\Block');
}

Контроллер

Использование with()

$categories = Blockcategory::with('blocks')->get();

После того, как вы определили отношение, вы можете вызвать метод blocks () из вашей модели, чтобы получить блоки

Примеры

$categories = Blockcategory::find(1)->blocks()->get();

// another way

$blocks = Blockcategory::blocks()->get();

Сагар ответит хорошо, но всегда лучше, чтобы ваши категории и их отношения были в одном запросе.Просто позвонив Blockcategory::all(), вы можете получить отношение в своем блейд-файле, но laravel должен выполнить дополнительный запрос для каждого блока в вашем для каждого цикла.Это может привести к проблемам с производительностью при наличии тысяч записей.

Связи Laravel

0 голосов
/ 08 февраля 2019

Вам необходимо определить взаимосвязь между блоками и категорией блоков.Убедитесь, что ваша таблица БД имеет отношение внешнего ключа.

Добавьте следующий код к вашей модели категории блока

public function blocks()
{
    return $this->hasMany('App\Block');
}

Убедитесь, что ваша модель блока находится в каталоге app/.

Теперь просто извлеките категории в вашем контроллере,

$categories = BlockCategory::all();

Затем вы можете отобразить данные следующим образом:

@foreach($categories as $category)
    {{$category->title}}
    @foreach($category->blocks as $block)
        {{$block->title}}
    @endforeach
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...