Laravel Eloquent Relationships - Объединенные таблицы

    class Withdraw extends Model
    {
    
       public function getUser()
        {
            return $this->belongsTo(User::class, 'user_id', 'id');
        }
    
        public function getStatus()
        {
            return $this->belongsTo(WithdrawStatus::class, 'status_id', 'id');
        }
    
     public static function getWithDrawList()
        {
            $data = Withdraw::with(['getUser' => function ($q) {
                        $q->select('users.*', 'trainer_details.default_acc_name', 'trainer_details.default_bank_id',
                        'trainer_details.default_acc_number');
                        $q->join('trainer_details', 'users.id', '=', 'trainer_details.user_id');
                    }])
                    ->with(['getStatus'])
                    ->get()
                    ->toArray();      
                    
           return $data;
        }
}

данные банковской таблицы

id,name

возврат данных с помощью getwithdrawlist

Array
(
    [0] => Array
        (
            [id] => 1
            [user_id] => 2
            [amount] => 200.0000
            [status_id] => 4
            [created_at] => 
            [updated_at] => 2020-09-18T15:53:13.000000Z
            [get_user] => Array
                (
                    [id] => 2
                    [name] => lim
                    [default_acc_name] => lim
                    [default_bank_id] => 1
                    [default_acc_number] => 123156
                )

            [get_status] => Array
                (
                    [id] => 4
                    [status] => Rejected
                    [created_at] => 2020-09-18T14:09:41.000000Z
                    [updated_at] => 2020-09-18T14:09:41.000000Z
                )

        )
)

Вопрос. Приведенный выше код предназначен для получения всех сведений о пользователе, поэтому всего необходимо объединить 4 таблицы, чтобы получить полные данные: пользователи, статус вывода, снятие средств, банки. . Мне удалось связать 3 таблицы вместе, но мне не удалось объединить данные с банками. Означает ли это, что банковские реквизиты должны возвращаться в массиве [get_user]? Кто-нибудь знает, как использовать отношения Laravel, чтобы присоединиться к другому столу, который является банками ya? Пожалуйста, порекомендуйте :((.


person MMMM    schedule 19.09.2020    source источник
comment
Как модель Банка соотносится с существующими моделями?   -  person Kevin Bui    schedule 19.09.2020


Ответы (1)


соответственно

 $data = Withdraw::with(['getUser' => function ($q) {
                        $q->select('users.*', 'trainer_details.default_acc_name', 'trainer_details.default_bank_id',
                        'trainer_details.default_acc_number');
                        $q->join('trainer_details', 'users.id', '=', 'trainer_details.user_id');
                    }])
                    ->with(['getStatus'])
                    ->get()
                    ->toArray();

не будет извлекать все данные, которые вам нужны для выполнения многих объединений, в зависимости от количества отношений, которые у вас есть, в вашем случае у вас есть 4 отношения, поэтому вам нужны соединения с ведущим 3

 $data = Withdraw::with(['getUser' => function ($q) {
                        $q->select('users.*', 'trainer_details.default_acc_name', 'trainer_details.default_bank_id',
                        'trainer_details.default_acc_number');
                        $q->join('trainer_details', 'bank.id', '=', 'trainer_details.user_id');
                        $q->join('trainer_details', put other relation if you have here, '=', 'trainer_details.user_id');
                        
                    }])
                    ->with(['getStatus'])
                    ->get()
                    ->toArray();
person Amar Dje    schedule 19.09.2020