在 Eloquent 上连接两个表

Posted

技术标签:

【中文标题】在 Eloquent 上连接两个表【英文标题】:Joining two tables on Eloquent 【发布时间】:2013-08-19 01:32:30 【问题描述】:

我需要在查询中加入两个表。

数据库结构

Products
    .id
    .image
    .category_id (points to categories.id)

Categories
    .id
    .category_name
    .category_directory_name

图片在category_directory_name目录下,所以我需要设置这两个表之间的关系,这样我就可以得到每个productcategory_directory_name

类似的东西;

<img src=" URL::to('uploads/categories/' . $v->category_directory_name . '/' . $v->image') ">

我该怎么做?

附言。我的表和列命名是本地的,所以我没有使用 Laravel 和 Eloquent 的内置功能。我想自己定义表名和列名。

【问题讨论】:

所以你想建立关系,使用 Eloquent,而不是使用 Eloquent 的内置机制?我不确定你的名字是“本地”是什么意思? 例如,Eloquent 模型可以命名为“Product”,它会自动指向“Products”表。我命名的表和列是用不同的语言编写的,所以依赖 Eloquent 的内置功能是行不通的。 有趣——你能在这里举一个具体的例子吗?是否因为 utf8 编码问题而无法使用其他语言? 好吧,你应该阅读一下 Laravel 的文档。这不是关于编码,而是关于语言。复数形式的产品是产品。 Laravel 足够聪明,可以理解英语的复数形式,因此它可能会指向 Products 表而无需您定义一个。 Laravel 不知道我的母语中模型名称的复数形式。 “Urun”模型指向“Urunler”表,我必须通过执行“protected $table = 'urunler';”手动定义它在我的“Urun”模型中让 Laravel 意识到这一点。 【参考方案1】:

在你的产品模型上你应该这样做

public function category() 

    return $this->belongsTo('Category');


在您的控制器中:

public function index() 

    $product = Product::find(1);

    return View::make('yourViewName')->with('product', $product);


在你看来:

<img src=" URL::to('uploads/categories/' . $product->category->category_directory_name . '/' . $product->image') ">

【讨论】:

应该 是答案,但我对 OP 的 cmets 中的“约束”语言感到困惑。 @fideloper:是的。在我选择这个作为正确答案之前,我有 3 分钟的时间。 AntonioCarlosRiberio:非常感谢!

以上是关于在 Eloquent 上连接两个表的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel eloquent 从两个连接表中获取数据

在 Laravel Eloquent 中连接表值

如何在laravel eloquent中为左连接表起别名

如果另一个连接为空,Laravel Eloquent 和 Mysql 连接一个表

在 Eloquent 中将数据透视表与多个表连接起来

如何使用 Eloquent 在数据透视表中插入多行?