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'.