我有3个表格:我的Laravel 5项目的产出、产品和服务。
我想基于此条件在一个查询中连接这3个表:
如果outputs.article_type='p'
(p=产品)获取products.name
如果输出。article_type='s'
(s=服务)获取服务。名称
$outputs = Output::join('products', 'products.id', '=', 'outputs.article_id')
... only if outputs.article_type is p (p=product)
->join('services', 'services.id', '=', 'outputs.article_id')
... only if outputs.article_type is s (s=service)
->select(array('outputs.output_at','---services or product---.name as article_name'))
检查这个连接使用查询生成器或ELoquent附加条件
但是也许你应该考虑急切加载而不是加入?
Output::with('Product', 'Service')->....
当然你需要先添加关系
public function service() {
if ($this->article_type == 's')
return $this->belongsTo('Service', 'article_id', 'id')
else
return null;
}
并重写name属性以获取所需的特定名称
public functon getNameAttribute() {
if ($this->service)
return $this->service->name;
else if ($this->product)
return $this->product->name;
}
不确定为什么需要将逻辑放在一个查询中。似乎是一个完美的吻的例子。
为什么不选择一个有1个参数和普通旧的IF
的函数来增加可读性,让你(也许还有其他开发者)的生活更轻松?我看不出你想做什么有什么好处。除了简洁之外,在这种情况下,我想这不是最重要的因素。
在输出方面。php模型:
/**
* Retrieves output of the given type.
*
* @param string $type Type of the output
*
* @return mixed Object or false in case of problems
*/
public static function getOutput($type) {
if (!isset($type) || empty($type) || !in_array($type, ['p', 's'])) {
// Wrong type
return false;
}
if ($type === 'p') {
$baseQuery = Output::join('products', 'products.id', '=', 'outputs.article_id');
$table = 'products';
} else {
$baseQuery = Output::join('services', 'services.id', '=', 'outputs.article_id');
$table = 'services';
}
return $baseQuery
->select('outputs.output_at', $table.'.name as article_name')
->get();
}
然后,在控制器中
$output = Output::getOutput('p');
if ($output && count($output)) {
// Do other stuff or pass the data to a view...
}
请记住,这还没有经过测试,可能需要与我展示的稍微不同的实现,但是这个想法仍然很清楚。
问题内容: 几个月前,我和其他人一起用PHP编写了一个简单的应用程序。在那里,我们需要根据一个用户ID和您需要从该用户ID选择的行中获取的另一个值,从多个表中执行SELECT。 我的第一个想法是创建多个SELECT并解析PHP脚本中的所有输出(使用所有mysql_num_rows()和类似的函数进行检查),但是那个家伙告诉我他会这样做。“好的没问题!” 我想,我的写作要少得多。好吧,当我发现他只用
常常来说,一个play的结果经常取决于一个变量的值,事件(从远端系统得到事件),或者之前任务的结果.在有些情况下,这些变量的值也会取决于其他变量. 进而,可以建立多余的组基于这些主机是否符合某些条件来操控主机,Ansible 提供了很多不同选项,来控制执行流. 让我们详细看看这些都是啥. When 语句 有时候用户有可能需要某一个主机越过某一个特定的步骤.这个过程就可以简单的像在某一个特定版本的系
问题内容: 我正在尝试将其编译。.我有一个带有firstname和lastname字段的表,并且我有一个字符串,例如“ Bob Jones”或“ Bob Michael Jones”等。 事实是,例如我姓鲍勃,姓迈克尔·琼斯 所以我想 但是它说未知列“ firstlast” ..有人可以帮助吗? 问题答案: 您提供的别名用于查询的输出-它们本身在查询中不可用。 您可以重复表达: 或包装查询
问题内容: 我有3张桌子: 我想显示所有车辆名称的列表。如果,也应返回。 所以我想我将从这里开始: 返回以下内容: 但是,我现在无法将其范围缩小到所需的结果。如果使用,则没有任何变化,因为我已经在JOIN之前选择了不同的汽车ID。加入后它们才是唯一的。如果使用,则删除最后两行,所有对货车的引用都消失了。如果使用,则将第一行和最后一行合并,但是摩托车的则是任意选择的。我想要的是: 我需要一个唯一的汽
我想在SQL中执行以下操作: 在jOOQ中,我将subQ存储到Select中 我的问题是,如何从subQ中获取maxCol列,并在join中使用它?我的连接是这样的: 我在()上出错 类型字段中的方法eq(字符串)不适用于参数(字段) 我该怎么办?