Как я могу фильтровать с помощью Eloquent либо в таблицах, либо одновременно объединять таблицы?

У меня есть две таблицы, product_template и shorttitles.

Продукт может иметь несколько коротких названий, в зависимости от языка. У продукта есть основное название (называемое mmac_ebay_titolo), а у короткого названия есть название, то есть название на другом языке.

Моя цель предназначен для фильтрации, в зависимости от ввода сообщения, заголовка коротких заголовков и заголовка product_template с опубликованной строкой.

если строка фильтра не передана, все работает нормально.

Модель shorttitles имеет следующее отношение:

public function prodotto()
{
    return $this->belongsTo('App\Product', 'product_id', 'id');
}

Модель product_template имеет следующее отношение:

public function shorttitle()
{
    return $this->hasMany('App\ShortTitle', 'product_id', 'id');
}

Но я застрял с кодом ниже:

$m = self::MODEL;
$query = $m::select("*");

$data["data"] = $query
 ->with(["prodotto" => function ($q) use ($params) {
            $q->select("id", "name", "mmac_ebay_titolo")
              ->where("name", "like", "%" . $params["search"] . "%");
       }]
)->where("lang_id", " = ", 1)
 ->offset($start)
 ->limit($limit)
 ->orderBy("id", "asc")
 ->get();

Этот запрос возвращает все короткие заголовки... с "prodotto" = null, если подзапрос не соответствует предложению where. Почему?

После этого я бы отфильтровал основную таблицу коротких заголовков следующим образом:

$m = self::MODEL;
$query = $m::select("*");

$data["data"] = $query
 ->with(["prodotto" => function ($q) use ($params) {
            $q->select("id", "name", "mmac_ebay_titolo")
              ->where("mmac_ebay_titolo", "like", "%" . $params["search"] . "%");
       }]
)->where("lang_id", " = ", 1)
 ->where("name", "like", "%" . $params["search"] . "%")
 ->offset($start)
 ->limit($limit)
 ->orderBy("id", "asc")
 ->get();

Я хочу воспроизвести этот запрос:

Select
    s.name,
    p.name,
    p.mmac_ebay_titolo
From
    mmac_brx_ebay_shorttitles s Inner Join
    product_template p On s.product_id = p.id
where lang_id = 1
and
(
  s.name like '%PIGNONE%'
  or
  p.name  like '%PIGNONE%'
  or
  p.mmac_ebay_titolo like '%PIGNONE%'
)

Как я могу этого добиться?

Спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

попробуйте этот запрос:

$products = $query->join('product_template','mmac_brx_ebay_shorttitles.product_id','=','product_template.id')
    ->where(function ($query) {
       $query->Where('mmac_brx_ebay_shorttitles.name','like','%PIGNONE%')
             ->orWhere('product_template.name','like','%PIGNONE%')
             ->orWhere('product_template.mmac_ebay_titolo','like','%PIGNONE%');
    })->where('your_table_name.lang_id',1)
    ->select('mmac_brx_ebay_shortitles.name','product_template.name','product_template.mmac_ebay_titolo')
    ->paginate(10);

Спасибо, это работает, но это то же самое, что и необработанный запрос... можно ли использовать чистый красноречивый подход?

Massimo Pozzo 10.04.2019 14:27
daylerees.com/code-happy-eloquent-orm Проверьте этот URL, вы можете найти «Нетерпеливая загрузка», которая поможет вам в этом.
Jaydip kharvad 10.04.2019 14:37

Другие вопросы по теме