Laravel Query仅使用关系' Join'检索一对值。在两个表之间

时间:2017-08-01 07:26:29

标签: laravel laravel-5 eloquent

我试图查询在数据库中显示以下架构的产品表 - >

表1 - >产品:

表:

enter image description here

与model product.php中的table products_details建立关系 - >

public function productdetails()
    {
        return $this->hasMany('App\Models\ProductDetails', 'productId', 'id');
    }

表2 - > products_details表显示每个产品的许多值对(名称/值):

表:

enter image description here

与模型productdetails.php中的表格产品有关系 - >

public function product()
{
    return $this->hasOne('App\Models\Product', 'productSku', 'productId');
}

使用Tinker查询模型我运行:

  

App \ Models \ Product :: join(' products_details',' products.productSku',   ' =',' products_details.productId') - > take(1) - > get();

给出结果:

Illuminate\Database\Eloquent\Collection {#1787
     all: [
       App\Models\Product {#1779
         id: 1,
         productName: "Samsung - Galaxy Core Prime 4G",
         productSku: "3953367",
         more info...
         created_at: "2017-04-08 18:28:46",
         updated_at: "2017-04-08 18:28:46",
         deleted_at: null,
         productId: 3953367,
         name: "Operating System",
         value: "Android 4.4 KitKat",
       },
     ],
   }

我的问题是,如何查询结果以便接收与productId关联的所有名称/值,现在考虑到我只接收product_details表中包含的第一对值,但不是所有关联的名称/值用那个productId。

     productId: 3953367,
     name: "Operating System",
     value: "Android 4.4 KitKat",
谢谢你!

-------------------------------更新--------------- -------------------

我犯了一个错误,在评论中他们提出了一个解决方案。正确的查询必须是:

 App\Models\Product::where('productSku', '=', SkuNumber)
                   ->join('products_details', 'products.productSku', '=', 'products_details.productId')
                   ->get()

1 个答案:

答案 0 :(得分:0)

解决方案: 我犯了一个错误,并在评论@Adrenaxus和@ka_lin解决了一个问题。正确的查询必须是:

App\Models\Product::where('productSku', '=', SkuNumber)
                   ->join('products_details', 'products.productSku', '=', 'products_details.productId')
                   ->get()