我有这个查询,当我在phpmyadmin中运行它时,它会返回我想要的内容
SELECT c.category_id, c.category_name, sc.sub_cat_id, sc.sub_cat_name, dsc.dual_sub_cat_id, dsc.dual_sub_cat_name
FROM category c
JOIN sub_category AS sc
JOIN dual_sub_category AS dsc
我现在想在Laravel查询中编写它,我已尝试过这个
$cat_display = DB::table('category')
->join ('sub_category')
->join ('dual_sub_category')
->get();
错误是
ErrorException:缺少Illuminate \ Database \ Query \ Builder :: join()
的参数2
据我所知,错误说我需要在两个连接上添加ON
子句但我不想这样做,因为我没有匹配它们的内容。
我只想查询并显示这3个表中的这些字段。是否可以不使用ON
和WHERE
条款?
答案 0 :(得分:2)
您可以通过Laravel Relation执行此操作:https://laravel.com/docs/5.3/eloquent-relationships
首先,创建一个Category
模型。
然后在Category
模型中定义两个关系,如下所示。
class Category extends Model
{
/**
* @var string
*/
protected $table = 'category';
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function subCategory()
{
return $this->hasMany(SubCategory::class, 'category_id', 'category_id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function dualSubCategory()
{
return $this->hasMany(DualSubCategory::class, 'category_id', 'category_id');
}
}
注意:SubCategory
和DualSubCategory
是模型。
在Controller中,您的函数使用以下代码。
$cat_display = Category::with(['subCategory','dualSubCategory'])->get()
如果你在这里遇到任何问题,请告诉我。
答案 1 :(得分:1)
你可以这样做
$cat_display = DB::table('category as c')
->join ('sub_category as sc', 'category.id', '=', 'category.id')
->join ('dual_sub_category as dsc', 'category.id', '=', 'category.id')
->select('c.category_id', 'c.category_name', 'sc.sub_cat_id', 'sc.sub_cat_name', 'dsc.dual_sub_cat_id', 'dsc.dual_sub_cat_name')
->get();
通过给连接条件赋予总是评估为true的东西,它的行为类似于完全没有条件:)
虽然你的类别表有一个名为id的列,但这确实存在。如果不是这种情况,则从表中选择任何列以评估其自身。
修改
好的,所以上面的代码应该使用纯SQL语句中的Laravel查询构建器为您提供相同的输出。我想在你没有得到你想要的所有数据之前是因为没有选择列。我再次尝试在我自己的系统上使用3个表,并从mysql终端获得与Laravel相同的结果:)如果一切正常,请告诉我。