在 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
目录下,所以我需要设置这两个表之间的关系,这样我就可以得到每个product
的category_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 从两个连接表中获取数据