我目前正在使用Laravel的流畅查询从MSSQL DB中获取数据。为了继续使用Eloquent的方法(列表,排序,过滤等),我将流畅的查询包装在一个新的集合中:
return new Collection( DB::table('tblCustomerUsers')
->select('ContractID','ContractNum','ContractName')
->where('CustomerUserID',Auth::User()->CustomerUserID)
->where('Restricted','0')
->orderBy('ContractTypeID','ASC')
->get()
);
根据需要使用各种轮和连接。这一切都很精彩,但是只要我使用除了获取之外的Eloquent方法,我会收到以下错误:
Argument 1 passed to Illuminate\\Support\\Collection::__construct() must be of the type array, object given
这似乎与返回到新集合的实际结构有关 - get()或take()返回一个对象数组,这很好,而它似乎是第一个()例如,只返回一个对象,因此来自Collection的错误。 Paginate()显然会返回一个Paginator对象,新的Collection也会发脾气。
我不想删除Collection包装器,因为我失去了对结果使用其他Collection方法的能力(我不想在查询本身中使用像lists()这样的方法因为我在视图中以不同的方式使用相同的设置查询结果,所以我试图保持其灵活性,并希望保持较低的查询数量。
也许我想尝试蛋糕并在这里吃,但如果没有,任何帮助都会受到赞赏!
干杯!
答案 0 :(得分:1)
你实际上可以使用Eloquent:
$users = DB::table('tblCustomerUsers')
->select('ContractID', 'ContractNum', 'ContractName')
->where('CustomerUserID', Auth::User()->CustomerUserID)
->where('Restricted', '0')
->orderBy('ContractTypeID', 'ASC')
->get();
$users = User::hydrate($users);
$users
现在将成为Eloquent用户模型的雄辩集合。
如果您只获得一件商品,请使用:
$user = DB::table('tblCustomerUsers')
->select('ContractID', 'ContractNum', 'ContractName')
->where('CustomerUserID', Auth::User()->CustomerUserID)
->where('Restricted', '0')
->orderBy('ContractTypeID', 'ASC')
->first();
$user = (new User)->newFromBuilder($user);
$user
现在是一个常规的Eloquent用户模型。