How can I join with Eloquent: Relationships?

20,928

If you want to find out product and store from review model then add two more methods to Review model as below.

Edit App\Review.php

//You already have key to to find store i.e. store_id
public function store()
{
    return $this->belongsTo(Store::class);
}


//You already have key to to find product i.e. product_id    
public function product()
{
    return $this->belongsTo(Product::class);
}

then execute your query as below

$reviews = Review::where('user_id', auth()->user()->id)
           ->with('store')
           ->with('product')
           ->with('user')
           ->get();

and you can access them as below,

Iterate through $reviews object as $review

$review->store->photo;
$review->product->photo;
$review->user->photo;
Share:
20,928
moses toh
Author by

moses toh

Updated on August 08, 2020

Comments

  • moses toh
    moses toh over 3 years

    My query is like this :

    <?php
    public function getListReviews()
    {
        $reviews = Review::where('user_id', auth()->user()->id)
                         ->get();
        return $reviews;
    }
    

    From the query, it can get all review data by id

    I want get user photo, store photo and product photo

    I want get it use Eloquent: Relationships

    How can I get it with Eloquent: Relationships?

    My review model is like this :

    <?php
    namespace App;
    use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
    use Jenssegers\Mongodb\Eloquent\HybridRelations;
    class Review extends Eloquent
    {
        use HybridRelations;
        protected $connection = 'mongodb';
        protected $fillable = ['user_id', 'user_name', 'product_id', 'product_name', 'store_id', 'store_name', 'invoice_number', 'rating', 'comments', 'created_at', 'updated_at'];
        public function user()
        {
            return $this->belongsTo(User::class);
        }
    }
    

    My user model is like this :

    <?php
    namespace App;
    ...
    class User extends Authenticatable
    {
        ...
        protected $fillable = ['name', 'email', 'password', 'birth_date', 'mobile_number', 'photo'];
        public function store()
        {
            return $this->hasOne(Store::class);
        }
    }
    

    My store model is like this :

    <?php
    namespace App\Models;
    use Illuminate\Database\Eloquent\Model;
    class Store extends Model
    {   
        protected $fillable = ['user_id', 'name', 'address', 'phones', 'total_product', 'photo'];
        public function products() 
        {
            return $this->hasMany(Product::class);
        }
    }
    

    My product model is like this :

    <?php
    namespace App\Models;
    use Illuminate\Database\Eloquent\Model;
    class Product extends Model
    {
        protected  $fillable = ['store_id','category_id','name', 'photo','description'];
        public function store()
        {
            return $this->belongsTo(Store::class);
        }
    }