Как получить красноречивую коллекцию родительской таблицы при применении предложения where к ее дочерней таблице - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть 2 таблицы. проекты и project_categories .Более поздняя таблица имеет внешний ключ project_id , который соответствует таблице projects .Оба имеют отношение один-к-одному, и по какой-то причине я хочу, чтобы информация о категории проекта была в другой таблице.

Теперь я хотел бы позволить пользователям просматривать проекты по категориям.Если бы категория была частью таблицы projects , я бы просто применил предложение where , чтобы получить проекты для выбранной категории.Есть ли какой-нибудь чистый способ, предложенный eloquent / построителем запросов, который бы получил коллекцию проектов таблицы, которые имеют категорию из project_categories таблицы?Опять же, project_categories имеет внешний ключ project_id , который связывает его с projects таблицей.

Я потратил довольно много времени, пытаясь найти аккуратныйрешение, но пока безрезультатно.Ваша помощь будет очень признательна.

Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2019

После невозможности найти встроенную функциональность из коробки от eloquent, я пришел к решению, что eloquent на самом деле не выходит за рамки отношений между таблицами.И эту задачу можно решить только с помощью объединений .

Однако Laravel по-прежнему предлагает довольно аккуратный синтаксис для использования объединений таблиц.Laravel предоставляет эту систему через DB Facade .Вот простой пример объединений, которые могут эффективно решить вышеуказанный вопрос, вероятно, наиболее эффективным способом из реляционных баз данных.

$projects = DB::table('projects')
            ->join('project_categories', 'projects.id', '=', 'project_categories.project_id')
            ->where('project_categories.main_category',$request->get('mc'))
            ->select('projects.*')
            ->get();

Примечание! Не забудьте ввести DB Facade

Вышеприведенное утверждение делает именно то, что было задано.В обоснование того, почему это может быть наиболее эффективным способом для таких случаев использования в реляционных базах данных, является тот факт, что этот оператор будет запрашивать базу данных только один раз.Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...