代码之家  ›  专栏  ›  技术社区  ›  McRui

从透视表中雄辩地获取数据

  •  1
  • McRui  · 技术社区  · 7 年前

    在使用透视表“product\u properties”从“products”表查询产品时,很难从相关的“properties”表中获取“property name”,即使在阅读了文档之后也是如此。

    我的模型: Models\Product::class , Models\Property::class Models\ProductProperty::class ;

    如果我运行查询:

    $product = new App\Models\Product();
    $product->where('id', 1)->with('properties')->get();
    

    产品 对象和 ,这很有效,但我不知道如何获得属性 名称 properties 桌子。

    总之,我需要显示属性 名称 属性 product_properties 桌子。例:130mm

    我需要达到的目标如下:

    Illuminate\Database\Eloquent\Collection {#4400
         all: [
           App\Models\Product {
             id: 1,
             name: "Chrystal Block",
             details: "Ships in an exclusive branded box.",
             price: 50.00,
             has_shipment: 1,
             created_at: "2019-05-10 02:15:22",
             updated_at: "2019-05-10 02:15:22",
             deleted_at: null,
             properties: Illuminate\Database\Eloquent\Collection {
               all: [
                 App\Models\ProductProperty {
                   product_id: 4,
                   property_id: 1,
                   value: "130",
                   unit: "mm",
                   created_at: "2019-05-11 23:09:35",
                   updated_at: "2019-05-11 23:09:35",
                   deleted_at: null,
    
                   // ***** This is what I'm looking for (hardcoded here *****
                   property: Illuminate\Database\Eloquent\Collection {
                    all: [
                        App\Models\Property {        
                            id: 1,
                            name: "width",
                            created_at: "2019-05-11 23:09:35",
                            updated_at: "2019-05-11 23:09:35",        
                        ]
                    },
    
                 },
                 App\Models\ProductProperty {
                   product_id: 4,
                   property_id: 2,
                   value: "17",
                   unit: "mm",
                   created_at: "2019-05-11 23:09:35",
                   updated_at: "2019-05-11 23:09:35",
                   deleted_at: null,
                 },
                 App\Models\ProductProperty {
                   product_id: 4,
                   property_id: 3,
                   value: "60",
                   unit: "mm",
                   created_at: "2019-05-11 23:09:35",
                   updated_at: "2019-05-11 23:09:35",
                   deleted_at: null,
                 },
                 App\Models\ProductProperty {
                   product_id: 4,
                   property_id: 4,
                   value: "2.78",
                   unit: "kg",
                   created_at: "2019-05-11 23:09:35",
                   updated_at: "2019-05-11 23:09:35",
                   deleted_at: null,
                 },
               ],
             },
           },
         ],
       }
    

    提前感谢您在这个雄辩的问题上的帮助。

    表' 产品 '

    +--------------+---------------------+------+-----+---------+----------------+
    | Field        | Type                | Null | Key | Default | Extra          |
    +--------------+---------------------+------+-----+---------+----------------+
    | id           | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
    | name         | varchar(191)        | NO   |     | NULL    |                |
    | details      | text                | NO   |     | NULL    |                |
    | price        | double(8,2)         | NO   |     | NULL    |                |
    | has_shipment | tinyint(1)          | NO   |     | NULL    |                |
    | created_at   | timestamp           | YES  |     | NULL    |                |
    | updated_at   | timestamp           | YES  |     | NULL    |                |
    | deleted_at   | timestamp           | YES  |     | NULL    |                |
    +--------------+---------------------+------+-----+---------+----------------+
    

    价值观:

    (1, 'Chrystal Block', 'Ships in an exclusive branded box.', 50.00, 1, '2019-05-10 02:15:22', '2019-05-10 02:15:22', NULL);
    

    属性

    +------------+---------------------+------+-----+---------+----------------+
    | Field      | Type                | Null | Key | Default | Extra          |
    +------------+---------------------+------+-----+---------+----------------+
    | id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
    | name       | varchar(191)        | NO   |     | NULL    |                |
    | created_at | timestamp           | YES  |     | NULL    |                |
    | updated_at | timestamp           | YES  |     | NULL    |                |
    | deleted_at | timestamp           | YES  |     | NULL    |                |
    +------------+---------------------+------+-----+---------+----------------+
    

    价值观:

    (1, 'width', '2019-05-11 22:53:45', '2019-05-11 22:53:45', NULL),
    (2, 'height', '2019-05-11 22:53:45', '2019-05-11 22:53:45', NULL),
    (3, 'length', '2019-05-11 22:53:45', '2019-05-11 22:53:45', NULL),
    (4, 'weight', '2019-05-11 22:53:45', '2019-05-11 22:53:45', NULL);
    

    表' '

    +-------------+---------------------+------+-----+---------+-------+
    | Field       | Type                | Null | Key | Default | Extra |
    +-------------+---------------------+------+-----+---------+-------+
    | product_id  | int(10) unsigned    | NO   | MUL | NULL    |       |
    | property_id | int(10) unsigned    | NO   | MUL | NULL    |       |
    | value       | varchar(191)        | NO   |     | NULL    |       |
    | unit        | varchar(191)        | NO   |     | NULL    |       |
    | created_at  | timestamp           | YES  |     | NULL    |       |
    | updated_at  | timestamp           | YES  |     | NULL    |       |
    | deleted_at  | timestamp           | YES  |     | NULL    |       |
    +-------------+---------------------+------+-----+---------+-------+
    

    价值观:

    (1, 1, '130', 'mm', '2019-05-11 23:09:35', '2019-05-11 23:09:35', NULL),
    (1, 2, '17', 'mm', '2019-05-11 23:09:35', '2019-05-11 23:09:35', NULL),
    (1, 3, '60', 'mm', '2019-05-11 23:09:35', '2019-05-11 23:09:35', NULL),
    (1, 4, '2.78', 'kg', '2019-05-11 23:09:35', '2019-05-11 23:09:35', NULL);
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   senty    7 年前

    要获取关系的关系(嵌套关系),可以尝试

    $product->where('id', 1)->with('properties.property')->get();
    

    in this answer 为了清楚起见。