【发布时间】:2019-08-31 17:17:23
【问题描述】:
我有两张桌子,product_template 和 shorttitles。
一个产品可以有多个短标题,具体取决于语言
一个产品有一个主标题(称为mmac_ebay_titolo),一个短标题有一个名称,即不同语言的标题。
我的目标是根据帖子输入过滤短标题标题和带有posted字符串的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();
如果子查询与 where 子句不匹配,则此查询将返回所有短标题...与 "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%'
)
我怎样才能做到这一点?
谢谢!
【问题讨论】:
标签: php sql laravel eloquent lumen