編輯基於提問者備註:說了這麼多,你可能需要訪問多個基於過濾器/搜索的表格字段。這是實現它的一種方法。
在你Order.php模型,做這樣的事情:
public function scopeOrdersByQuery($query, $userName, $orderName)
{
$query->leftJoin('users', 'users.id', '=', 'orders.user_id')
->select(array('orders.*', DB::raw('users.name as user_name'), DB::raw('users.id as uid')));
if (!empty($userName))
{
$query = $query->whereIn('users.user_name', $userName);
}
if (!empty($orderName))
{
$query = $query->whereIn('orders.name', $orderName);
}
}
添加更多的表連接的需要。
在你OrdersController做這樣的事情:
$userName = Input::get('userName');
$orderName = Input::get('orderName');
$orders = Order::ordersByQuery($userName, $orderName)->get();
現在,您可以顯示所有的訂單,或者搜索基於多個查詢或只有一個。沒有測試,但應該工作。
------------ ------------編輯
我想,如果你想獲得的所有訂單爲特定用戶使用的用戶ID 。
在您的訂單。PHP的模式,這樣做:
public static function getOrdersByUserId($userId)
{
$orders = Order::with('user')->whereIn('user_id', $userId)->get();
return $orders;
}
然後,您可以通過這種方法,特定的用戶ID你後你OrdersController這樣做:現在
$userId = Input::get('user');
$orders = Order::getOrdersByUserId($userId);
,這是假設在你看來,你是將用戶標識添加到名爲'user'的輸入值。
您還可以擴展getOrdersByUserId()方法,通過在Orders.php模型使用範圍的方法,以適應空白$ userId的值,就像這樣:
public function scopeGetOrdersByUserId($query, $userId)
{
$query->with('user');
if(!empty($userId))
{
$query = $query->whereIn('user_id', $userId);
}
}
在你的控制器
現在,這樣做:
$userId = Input::get('user');
$orders = Order::getOrdersByUserId($userId)->get();
// if paginating do $orders = Order::getOrdersByUserId($userId)->paginate(10);
這樣做可以讓您在OrdersController的索引方法中使用此代碼,從而允許您在提供ID時顯示所有訂單或特定用戶訂單。
編輯:有一件事我忘了提的是,生成表單的時候,在你的控制器做:
$users = User::orderBy('name')->lists('name', 'id');
那麼這個變量傳遞到您的視圖,並用它來填充你的用戶選擇框。我假設你正在使用選擇框來選擇用戶。
編輯:正如@GladToHelp指出的那樣,您可能希望使用Eager Load Constraints將約束添加到急切加載的模型。您可以通過在你的Orders.php模型中使用修改getOrdersByUserId()方法的範圍這樣做用戶名,而不是:
public function scopeGetOrdersByUserName($query, $userName)
{
$query->with(array('user' => function($query2)
{
$query2->where('name', 'like', '%$userName%');
}));
}
注意:這是未經測試的代碼。
這就是說,你可能想簡單地使用:
$user = User::with('orders')->where('name', $name)->get();
然後使用foreach循環在視圖上$用戶>訂單。
據我所知,在當前版本中,不能使用細節表過濾器過濾主表。您將使用原始SQL或Fluent編寫該代碼。 –