Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Xa HasManyThrough

Tôi không nghĩ rằng có phương pháp như vậy trong Laravel. Bạn phải tạo truy vấn tùy chỉnh của mình. Truy vấn tùy chỉnh này có thể rất tốn kém vì nhiều truy vấn sẽ được thực hiện. Vì vậy, giải pháp tối ưu cho điều này, theo tôi, là liên kết Người dùng và Cơ hội với một khóa ngoại.

Tuy nhiên, nếu bạn không muốn liên kết Người dùng và Cơ hội bằng khóa ngoại, thì bạn có thể tạo truy vấn tùy chỉnh để xử lý điều này. Chỉ cần thêm mối quan hệ "hasManyThrough" giữa mô hình Cơ hội và Khách hàng như,

    <?php
    class Client extends Eloquent{
        public function store(){
            return $this->hasMany('Store');
        }
        public function user(){
            return $this->belongsTo('User');
        }

        public function opportunity(){
            return $this->hasManyThrough('Opportunity', 'Store');
        }
    }

Sau đó, tạo một hàm tĩnh trong Mô hình người dùng.

    <?php

    class User extends Eloquent implements UserInterface, RemindableInterface {

        use UserTrait, RemindableTrait;

        public function client(){
            return $this->hasMany('Client');
        }
        public function store(){
            return $this->hasManyThrough('Store', 'Client');
        }

        public static function getOpportunityOfUser($userId)
        {
             $clients = User::find($userId)->client;

            foreach ($clients as $client) {
                $opportunities[] = Client::find($client->id)->opportunity;
            }

            return $opportunities;
        }
    }

Giờ đây, bạn có thể truy cập Cơ hội được hiện thực hóa cho Người dùng trong một lần như thế,

    Route::get('/', function()
    {   
         return $usersOpportunities = User::getOpportunityOfUser(1);
    });

Điều này sẽ trả lại tất cả cơ hội của tất cả các khách hàng liên quan đến Người dùng có id '1'.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đồng hồ đếm ngược-php + mysql + js

  2. Sử dụng MySql MySQLMembershipProvider - autogenerateschema =true không hoạt động?

  3. CDbConnection không mở được kết nối DB:không thể tìm thấy trình điều khiển trong Yii

  4. CodeIgniter Active Record - Nhóm câu lệnh OR

  5. C # MySql TẠO NGƯỜI DÙNG