开始使用Eloquent hasMany()关系

时间:2014-05-01 20:44:10

标签: php laravel eloquent

我有一个类别表,其中存储了我的类别及其标题和缩略图。

我有另一张存储图像的表格。

第三个表是联合表。我存储在它的每个记录中,图像的id和类别的id。

表架构:

id
cat_id
item_id

现在我想通过query_string获取cat_id,然后将其传递给函数,以获取数据库中具有此类别的所有图像的列表。

我对如何编写方法感到困惑。我为CategoryList模型编写了以下方法,该方法抛出错误:

class CategoryList extends Eloquent
{

    protected $table = "categories_list";

    function Images ()
    {
        return $this->hasMany("Image", 'id');
    }
} 

以下是Image模型中的用法:

return CategoryList::Images()->where("cat_id", '=', $catid)->get()->toArray();

但它会引发以下错误:

{"error":{"type":"Illuminate\\Database\\QueryException","message":"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'cat_id' in 'where clause' (SQL: select * from `images` where `images`.`id` is null and `cat_id` = 19)","file":"C:\\wamp\\www\\aone\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php","line":539}}

1 个答案:

答案 0 :(得分:1)

class Category extends Eloquent {

    public function images()
    {
        return $this->belongsToMany('Image');
    }
}

然后做:

$images= Categorie::find($catid)->images;

在这种情况下,您的数据透视表是'category_image',但如果您需要选择其他名称,则必须指定

return $this->belongsToMany('Image', 'your_pivot_table_name', 'cat_id', 'item_id');

请访问http://laravel.com/docs/eloquent#many-to-many了解详情