Reputation: 4152
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 joinmerchant_user_permission
onmerchant_user_permission
.id
=merchant_user
.merchant_user_permission_id
wheremerchant_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
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