【问题标题】:从其他模型加入列
【发布时间】:2015-06-28 20:55:25
【问题描述】:

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

当我退回所有产品时,我希望将 category_id 字段替换为 "categories" 表中对应的 "name" 值。

示例:

类别:

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 eloquent


    【解决方案1】:

    我认为 Laravel 做到这一点并保持与数据库无关的方式将执行以下操作。 (仅供参考 - 我正在使用 Laravel 5 命名空间。)

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

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

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

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

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

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

    但是你总是可以像这样使用 Laravel 的 QueryBuilder 类来创建手动连接。

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

    【讨论】:

    • 谢谢,非常好的回答。我已经编写了连接查询,但我正在寻找“Laravel 方式”。非常感谢。
    【解决方案2】:

    将所有产品放入一个变量中

    $products = Product::all();
    

    现在在该变量上使用 for 循环

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      相关资源
      最近更新 更多