У меня есть две таблицы: product_template
и shorttitles
.
. В зависимости от языка у продукта может быть несколько ярлыков. У продукта есть основное название (называемое mmac_ebay_titolo
), а у ярлыка -name, то есть заголовок на другом языке.
Моя цель - отфильтровать, в зависимости от ввода сообщений, заголовок ярлыков и заголовок 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, если подзапрос не совпадаетпункт где.Почему?
После этого я бы отфильтровал основную таблицу сокращений следующим образом:
$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%'
)
Как мне добитьсяэто?
Спасибо!