我有两种型号:
排序
字段
我想按排序字段(ASC)获取订购的产品,但库存量等于0的产品需要位于列表的末尾。
例如。
产品介绍
id sort
1 3
2 4
3 2
4 1
股票
product_id quantity
1 2
1 3
2 5
3 0
4 2
预期列表(产品ID)-4、1、2、3
我已经为我需要做的事情编写了SQL查询。
select p.url, p.sort, s.tot
from products p
inner join (select product_id, sum(quantity) as tot from stocks group by product_id) s on p.id = s.product_id
order by case when s.tot = 0 then 1 else 0 end, p.sort asc
php prettyprint-override">public function stocks() {
return $this->hasMany('\App\Stock', 'product_id');
}
有没有一种方法可以使用雄辩模型的作用域来获得此类列表?
使现代化
解决方案。
public function scopeOrdered($query, $notInStock = false)
{
if($notInStock)
return $query->join(DB::raw("(
select product_id, sum(quantity) as tot
from stocks
group by product_id
) s"), 'products.id', '=', 's.product_id')->orderByRaw("case when s.tot = 0 then 1 else 0 end, products.sort ASC");
else
return $query->orderBy('sort', 'asc');
}
您可以使用合并方法。但我认为您的数据库设计不正确。我认为最好在product表中添加quantity字段。若出于任何原因希望保留此设计,那个么可以在stocks表中为product_id设置唯一索引。例如,您的一个产品(id=1)现在有两个数量。这在现实世界中是不可能的
$query1 = Product::whereHas('stocks' , function ($q) {
$q->where('quantity', '<>', 0);
})->with('stocks')->orderBy('sort','asc')->get();
$query2 = Product::whereHas('stocks' , function ($q) {
$q->where('quantity', 0);
})->with('stocks')->get();
$merged = $query1->merge($query2);
return $merged;
您可以使用以下示例中的查询:
$products = DB::table('products')
->join('stocks', 'stocks.product_id', '=', 'products.id')
->selectRaw(' product_id, sum(quantity) as tot')
->groupBy('product_id')
->orderByRaw(
"CASE WHEN quantity = 0 THEN 1 ELSE 0 END ASC"
)
->get();
return $products;
问题内容: 我试图按表中的列对表中的产品进行排序: 我在商店\产品模型中设置关系: 但是产品没有分类。我得到一个仅适用于表的查询。 如何解决? 问题答案: 急切的加载使用单独的查询,因此您需要为此加入: 子句是为了不将联接的列追加到模型中。 编辑:根据@alexw注释-如果需要,您仍然可以包括联接表中的列。您可以将它们添加到或致电等。
尝试先按最新日期,然后按状态订购我的表。状态可以是(新建、审核中、拒绝、关闭),状态是数据库中的枚举字段。 我试了几件事都没有成功。这是我对这个代码最接近的了。我是新来的Laravel,所以不知道如何做到这一点。 这就产生了: 我希望它看起来像这样,按日期排序,首先是最新的日期,然后是状态="New"。我希望它看起来像这样:
因此,我在JeffreyWay的屏幕广播中了解到,我可以使用Eloquent从注入到另一个模型的模型中获取相关id。 我正在关注他关于Laravel 5.4的系列报道。 在这里,我有一个用户到帖子的一对多关系。 应用程序/帖子 在我的用户模型中,我有一个发布方法,其中注入了发布模型。发布方法用于创建进入数据库的发布条目。 应用/用户 然后,我在PostsController中有一个存储方法,它在我
我正在尝试使用Laravel雄辩的模型查询多个表,这些模型具有一对一、一对多和多对多的关系。 我有一个表,一个表,一个表和一个透视表。 每个表单有一个品牌和一个用户: 品牌没有任何外键: 用户没有任何外键: 有一个数据透视表可以创建多对多的关系,用于创建拥有许多用户(如品牌成员)的品牌组: 我试图通过直接所有权()或品牌成员身份获取属于用户的所有表单,通过多对多透视表获取用户所属的所有品牌的所有表
简介: 我有这些表与他们的模型: 地址表-- 规则: 每个用户只能有一个地址 这里可以进行两种可能的关系规划: > 用户有一个地址和地址属性To User[即一对一关系],但缺点是外键位于地址表中,即user_id字段,通过与其他模型[公司和财产]重复相同的关系,我们将获得地址表中的另外两个外键是[company_id和property_id],那么我们将最终得到3个外键用于3个型号,但每行记录只
我将有一个充满涉及其他表(关系)的信息的表。此表中的大多数信息将只有引用相关表的ID。如果我使用“产品”作为此表的示例,对于某些列来说可能是这样的: 我想把这个“产品”表倒出到一个列表中。当我将其转储(关系)时,我需要查找这些列中的所有项。我知道如何做物品和物品,但是我不确定如果我有一个“产品”模型,我怎么能用雄辩的模型一次性做到这一点?我应该让产品表只是一个数据透视表吗?我可以用雄辩的模型做它,