#php #sql #laravel #eloquent #lumen
#php #sql #laravel #eloquent #lumen
Вопрос:
У меня есть две таблицы, product_template
и shorttitles
.
Продукт может иметь несколько кратких названий, в зависимости от языка, у продукта есть основное название (called mmac_ebay_titolo
), а у краткого заголовка есть имя, то есть название на другом языке.
Моя цель — фильтровать, в зависимости от ввода post, заголовок shorttitles и заголовок product_template с размещенной строкой.
если строка фильтра не передается, все работает нормально.
shorttitles
Модель имеет такое отношение:
public function prodotto()
{
return $this->belongsTo('AppProduct', 'product_id', 'id');
}
product_template
Модель имеет такое отношение:
public function shorttitle()
{
return $this->hasMany('AppShortTitle', '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 . Почему?
После этого я бы отфильтровал основную таблицу shorttitles следующим образом:
$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%'
)
Как я могу этого добиться?
Спасибо!
Ответ №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);
Комментарии:
1. Спасибо, это работает, но это то же самое, что и в необработанном запросе… можно ли использовать чистый подход eloquent?
2. daylerees.com/code-happy-eloquent-orm Проверьте этот URL-адрес, по которому вы можете найти «Нетерпеливая загрузка», которая поможет вам в этом