从Laravel中的三个表中选择,不指定ON

时间:2016-12-22 10:07:25

标签: mysql laravel

我有这个查询,当我在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个表中的这些字段。是否可以不使用ONWHERE条款?

2 个答案:

答案 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');
    }
}

注意:SubCategoryDualSubCategory是模型。

在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相同的结果:)如果一切正常,请告诉我。