加入来自其他模型的列

join column from other model

您好,我有两个模型类别和产品。 Category 模型具有如下 table 结构:"id, name" 并且 Product 具有:"id, name, category_id"

当我 return 所有产品时,我希望 category_id 字段替换为 "name" 中相应的值 "categories" table.

示例:

类别:

id    name
1     cloth
2     food

产品:

id    name      category_id
1     carrot    2
2     pants     1
3     shirt     1

结果

id    name      category_id
1     carrot    food
2     pants     cloth
3     shirt     cloth

我认为 Laravel 实现它并保持数据库不可知的方法将执行以下操作。 (仅供参考 - 我正在使用 Laravel 5 命名空间。)

在您的产品模型中定义了正确的类别关系,如下所示:

class Product extends Model {

     public function category(){
        return $this->hasOne('App\Category'); //Laravel 5 Namespacing included
    }

}

然后在你的控制器中调用:

$products = Product::with('category')->get();

最后,在 blade 的 foreach 循环中,您可以使用它来访问类别名称:

@foreach($products as $product)
    $product->category->name
@endforeach

但您始终可以使用 Laravel 的 QueryBuilder Class 来创建手动连接,也可以这样。

$products = Product::join('categories', 'categories.id', '=', 'products.category_id')
            ->selectRaw('products.id, products.name, categories.name as category_id')
            ->get();

将所有产品放入一个变量

$products = Product::all();

现在对该变量使用 for 循环

foreach ($products as $product)
{
    $id = $product->category_id;
    $category = Category::find($id)->name;
    $product->category_id = $category;
    $product->save();
}