如何使这种关系在MYSQL或Laravel

时间:2016-02-16 13:00:10

标签: php mysql sql laravel relational-database

我对MYSQL一点也不奇怪,但是只要我了解基础知识,laravel框架就让我很容易得到我需要的东西。

所以这个问题将首先针对MYSQL人员,因为我宁愿弄清楚如何在普通的MYSQL中实现这一点,然后将其转换为laravel查询。

我有4个表需要在此查询中使用,如下所示:

1. products

    id | name | description | price

2. customers

    id | fname | lname | email | telephone

3. orders

    id | customer_id | total_price | status

4. order_items

    id | order_id | product_id | quantity | price

所以我在我的网络应用程序上创建一个订单页面。在此页面上,它将显示所有订单的列表,包括该特定订单的order_items。它还将包括此订单所属的客户。

我已经设法使用laravel实现了上述功能,我得到了下面的数组:

Array
(
[0] => Array
    (
        [id] => 9
        [customer_id] => 16
        [total_price] => 103.96
        [status] => new
        [created_at] => 2016-02-24 03:06:41
        [customer] => Array
            (
                [id] => 16
                [fname] => firstname
                [lname] => lastname
                [email] => firstname.lastname@gmail.com
                [telephone] => 07707707707
                [address_line_1] => Warstone Rd, walsall
                [address_line_2] => Wolverhampton 
                [postcode] => WV10 7LX
            )

        [order_item] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [order_id] => 9
                        [product_id] => 44
                        [quantity] => 1
                        [price] => 50.00
                    )

                [1] => Array
                    (
                        [id] => 2
                        [order_id] => 9
                        [product_id] => 46
                        [quantity] => 2
                        [price] => 31.98
                    )

                [2] => Array
                    (
                        [id] => 3
                        [order_id] => 9
                        [product_id] => 48
                        [quantity] => 1
                        [price] => 7.99
                    )

                [3] => Array
                    (
                        [id] => 4
                        [order_id] => 9
                        [product_id] => 51
                        [quantity] => 1
                        [price] => 13.99
                    )

            )

    )

)

现在,我遇到问题的部分是获取与order_items相关的产品。

到目前为止,它对我有用,因为我一直在想这样的

$order = Order::find($id)->with('customer','orderItem')->get()->toArray();

这很容易,因为订单有一个customer_id字段,order_items有一个order_id。但是对于我来说,我需要将产品加入order_items。

如果任何一个人擅长MYSQL,可以为我提供一个查询,然后转换成laravel,这将是很棒的。

如果有人知道laravel 5,那么这就是下面的所有laravel内容:

Order.php


public function customer(){
    return $this->belongsTo('App\Customer');
}

public function orderItem(){
    return $this->hasMany('App\OrderItem');
}


OrderItem.php

public function order(){
    $this->belongsTo('App\Order');
}

public function product(){
    $this->hasOne('App\Product');
}


Product.php

public function orderitem(){
    $this->hasOne('App\OrderItem');
}


Customer.php

public function orders(){
    $this->belongsTo('App\Order');
}

正如你所看到的,我已经建立了我的模态关系。

这是我的控制器,我试图获得完整的阵列。

public function show($id)
{
    $order = Order::find($id)->with('customer','orderItem','product')->get()->toArray();

    echo "<pre>";
    print_r($order);
    echo "</pre>";
}

我收到的错误是:

 call to undefined method Illuminate\Database\Query\Builder::product()

如果我删除 - &gt; with(&#39; customer&#39;,&#39; orderItem&#39;,&#39; product&#39;)并将其更改为 - &gt; with(&# 39; customer&#39;,&#39; orderItem&#39;)我得到上面发布的数组。

有谁知道我能做到这一点吗?

1 个答案:

答案 0 :(得分:1)

你在正确的部分是你唯一的错误就是你在订单模型上调用产品与它没有直接关系。您必须通过orderitem模型调用产品模型,如此

   Order::find($id)->with('customer','orderItem.product')->get()->toArray()