mikelovelyuk
mikelovelyuk

Reputation: 4152

Laravel HasManyThrough not working

I want get all merchant users for a specific merchant. Here is my setup;

merchant
- id

merchant_user_permission
- merchant_id (equal to merchant.id)
- user_id (equal to merchant_user.id)

merchant_user
- id

In my code I have tried:

class Merchant extends Model
{
    public function merchant_users()
    {
        return $this->hasManyThrough(MerchantUser::class, MerchantUserPermission::class, 'user_id');
    }
}

But the resulting sql is invalid.

string(374) "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'merchant_user.merchant_user_permission_id' in 'on clause' (SQL: select count(*) as aggregate from merchant_user inner join merchant_user_permission on merchant_user_permission.id = merchant_user.merchant_user_permission_id where merchant_user_permission.user_id = 123-3456-7789-qwerty)"

Here is a working sql example:

SELECT mu.`id`, mu.`email`
FROM `merchant` m
LEFT JOIN `merchant_user_permission` mup ON m.id = mup.merchant_id
LEFT JOIN `merchant_user` mu ON mu.id = mup.user_id
WHERE mup.`merchant_id` = '123-3456-7789-qwerty'

How can replicate that using Eloquent 5.4?

Upvotes: 0

Views: 530

Answers (1)

sumit
sumit

Reputation: 15464

try this

Make many to many relationship

class Merchant extends Model
{
    public function merchant_users()
    {
        return $this->belongsToMany('App\ MerchantUser', 'merchant_user_permission', 'merchant_id', 'merchant_user_id');
    }
}

then

$permissions = App\Merchant::find($merchant_id)->merchant_users()->get();

Upvotes: 3

Related Questions