Как я могу запросить трехмерные отношения по laravel красноречивым ORM? - PullRequest
0 голосов
/ 12 апреля 2020

Как мне сделать трехмерный запрос по laravel красноречивому ORM? Есть четыре таблицы, такие как «покупатели», «продукты», «заказы» и «покупки» и четыре модели «покупатель», «продукты», «заказы» и «покупки». Таблица структуры ниже

покупатели Таблица

id --- name --- email
1 ---- John --- john@example.com
2 ---- Kelly -- kelly@example.com
3 ---- Chery -- chery@example.com

продукты Таблица:

id --- name ---- quantity ---- price
1 ---- Apple --- 5Kg --------- 10$
2 ---- Orange -- 10kg -------- 11$
3 ---- Grapes -- 20kg -------- 15$

таблица заказов Таблица:

id --- buyer_id --- status
1 ---- 1 ----------- 0
2 ---- 2 ----------- 1
3 ---- 3 ----------- 0

таблица покупок:

id --- order_id ---- product_id --- price --- quantity --- total_price
1 ---- 1 ----------- 2 ------------ 11$ ----- 2Kg -------- 22$
2 ---- 1 ----------- 1 ------------ 10$ ----- 1Kg -------- 10$
3 ---- 1 ----------- 3 ------------ 15$ ----- 5Kg -------- 75$
4 ---- 2 ----------- 1 ------------ 10$ ----- 3kg -------- 30$
5 ---- 2 ----------- 2 ------------ 11$ ----- 4kg -------- 44$
6 ---- 2 ----------- 3 ------------ 15$ ----- 3kg -------- 45$

Теперь я хочу запросить все заказы по laravel красноречиво с названием продукта, а не по построителям запросов.

$orders = Order::where('status', 0)->...........??

Пожалуйста, помогите мне, как я могу сделать это по laravel красноречивому запросу , это возможно или нет. если это возможно, помогите мне, пожалуйста.

Ответы [ 3 ]

0 голосов
/ 12 апреля 2020

Ну, я не могу сделать то же самое в моей локальной среде, но я дам вам основную c идею о том, как получить детали всех связанных данных. Убедитесь, что ваша модель имеет указанные методы

Покупатель. php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Carbon\Carbon;

class Buyer extends Model
{

    /**
     * other functions and properties.
     */

    /**
     * Get the orders associated with the buyer.
     */
    public function orders()
    {
        return $this->hasMany('App\Order', 'buyer_id')->where('status', 1);
    }
}

Заказ. php

class Order extends Model
{

    /**
     * other functions and properties.
     */

    /**
     * Get the purchases associated with the Order.
     */
    public function purchases()
    {
        return $this->hasMany('App\Purchase', 'order_id');
    }

    /**
     * Get the buyer belongs to the Order.
     */
    public function buyer()
    {
        return $this->belongsTo('App\Buyer', 'buyer_id');
    }
}

Покупка. php

class Purchases extends Model
{    
    /**
     * other functions and properties.
     */

    /**
     * Get the user product belongs to the Purchase.
     */
    public function product()
    {
        return $this->belongsTo('App\Product', 'product_id');
    }

    /**
     * Get the user product belongs to the Purchase.
     */
    public function order()
    {
        return $this->belongsTo('App\Order', 'order_id');
    }
}

Контроллер. php

$buyer_id = 1;
$orders = App\Buyer::where('id', $buyer_id)->with('orders')->get();

Таким образом, вы получаете все данные и связанные с ними данные. т. е. приведенный выше запрос даст вам информацию о покупателях, а новые заказы на недвижимость, представляющие собой массив, представляют все заказы, принадлежащие данному покупателю.

Каждый заказ также имеет свойство покупки, которое включает в себя массив объектов, а каждый объект (то есть объект покупки) имеет свойство продукта, которое представляет сведения о продукте.

Согласно вашему запросу, если вы хотите, чтобы все заказы были у покупателя, а также данные о покупке (включая информацию о товаре).

$orders = Order::where('status', 0)->with(['buyer', 'purchases'])->get();

и если вы хотите, чтобы все заказы покупателя и сведения о товаре были получены у него.

$orders = Order::where('status', 0)->with(['buyer', 'purchases.product'])->get();
print_r($orders);
0 голосов
/ 12 апреля 2020

Здесь (status = 0) => не оплаченный заказ и (status = 1) => Оплаченный заказ и всегда один покупатель имеет только один не оплаченный заказ, не более. Но есть больше оплаченных заказов.

Покупатель. php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Carbon\Carbon;

class Buyer extends Model
{

    /**
     * other functions and properties.
     */

    /**
     * Get the orders associated with the buyer.
     */
    public function orders()
    {
        return $this->hasMany('App\Order', 'buyer_id')->where('status', 0);
    }
}

Заказ. php

class Order extends Model
{

    /**
     * other functions and properties.
     */

    /**
     * Get the purchases associated with the Order.
     */
    public function purchases()
    {
        return $this->hasMany('App\Order', 'order_id');
    }
}

Покупка. php

class Purchases extends Model
{    
    /**
     * other functions and properties.
     */

    /**
     * Get the user product associated with the Purchase.
     */
    public function product()
    {
        return $this->belongsTo('App\Product', 'product_id');
    }
}

Теперь запрос такой же.

$order = Order::with(['buyer', 'purchases', 'purchases.product'])->where('id', order_id)->first();
0 голосов
/ 12 апреля 2020

Теперь я хочу запросить все заказы по laravel eloquent

Не могли бы вы подробнее указать c, что именно вам нужно?

В вашем примере вы уже запрашиваете заказы, и если вы определили отношения в моделях, вы уже можете получить доступ к связанным таблицам. С помощью eloquent для запроса по отношениям вы можете использовать ->whereHas см. Laravel do c, а для передачи всей связанной информации объекту вы можете использовать ->with , см. Eager loading

Не уверен, что это может помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...