首页 文章

Laravel连接表上的一元关系

提问于
浏览
1

我在Laravel 5.1上运行

目前我面临的问题与一元关系中的 SELECT 查询有关 .

我有一个 Category 型号 . 它具有以下属性: idparent_idname .

我想执行一个搜索功能,按类别名称和父类别名称进行过滤 .

我有这个问题

public function index($parent_id = 0)
{   
    $query = Category::select('category.*');

    if (\Input::get('q')) {
        $q = \Input::get('q');

        $query->leftJoin('category as parent', 'parent.id', '=', 'category.parent_id')
            ->where(function($query) use($q) {
                $query->orWhere('category.name', 'LIKE', '%' . $q . '%')
                    ->orWhere('parent.name', 'LIKE', '%' . $q . '%')
                ;   
            }); 
    }
    $query->where('parent_id', $parent_id); // update Nov 19, 2015 16:31
    ...
}

从这个脚本,我得到了错误

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'parent_id' in where clause is ambiguous (SQL: select count(*) as aggregate from `category` left join `category` as `parent` on `parent`.`id` = `category`.`parent_id` where `category`.`deleted_at` is null and (`category`.`name` LIKE %q% or `parent`.`name` LIKE %q%))

知道如何将另一个 alias 放到当前表(不是父表)吗?

1 回答

  • 1

    我意识到有一个 WHERE 条件我没有放在表名中 .

    $query->where('category.parent_id', $parent_id);
    

    在我输入 category. 后,现在它工作正常 .

相关问题