Как преобразовать запрос MySQL в Eloquent Relationships? - PullRequest
0 голосов
/ 10 декабря 2018

Я не знаю, какие слова или термины я бы искал.Я также прочитал документацию в laravel 5.7, https://laravel.com/docs/5.7/eloquent-relationships#many-to-many-polymorphic-relations.

Но все же я не смог найти то, что мне нужно.

Результат, который я ожидаю, заключается в следующем:MySQL:

SELECT id as product_id, (SELECT name FROM products WHERE id = transactions.product_id), created_at FROM transactions WHERE user_id = 1

Это результат запроса mysql:
enter image description here

У меня уже естьмодель:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Transactions extends Model
{
    protected $table = 'transactions';
    protected $fillable = [
        'user_id', 'product_id'
    ];

    public function product()
    {
        return $this->hasOne('App\Products')->select('name');
    }
}
?> 

Тогда в моем контроллере:

public function transactions()
{
    $transactions = new Transactions::where('user_id',Auth::id())->product;
    return view('transactions', ['transactions' => $transactions]);
}

1 Ответ

0 голосов
/ 10 декабря 2018

Вы должны использовать belongsTo() отношение.Транзакция принадлежит одному продукту, продукт имеет много транзакций.

Кроме того, вы можете (или лучше должны) переименовать модель в единственное число.Тогда вам не нужно использовать protected $table.

Не обязательно выбирать только name.

Модель транзакции:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Transaction extends Model
{
    protected $fillable = ['user_id', 'product_id'];

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

Контроллер:

public function transactions()
{
    $transactions = Transaction::with('product')
        ->where('user_id', Auth::id())
        ->get();

    return view('transactions', ['transactions' => $transactions]);
}

Вид:

@foreach($transactions as $transaction)
    echo $transaction->product_id; //attribute product_id of transaction
    echo $transaction->product->id; //attribute id of product
    echo $transaction->product->name;  //attribute name of product
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...