我正在尝试运行此SQL查询:
SELECT head_account_id, account_id, created_on, result, COUNT(*) AS counter FROM notes
WHERE result = 'not_processed' AND created_on >= (now() - INTERVAL 3 DAY) AND created_on <= (now() - INTERVAL 8 HOUR)
AND account_id IN (SELECT id FROM accounts WHERE account_status = 'approved' AND demo = 0)
GROUP BY account_id
ORDER BY head_account_id, account_id, created_on DESC;
使用Laravel querybuilder:
$appointments = DB::table('confirmed_appointments')
->select('head_account_id','account_id','created_on','result', DB::raw('count(*) as counter'))
->where('result', 'not_processed')
->where('created_on', '>=', DB::raw('now() - interval 3 day'))
->where('created_on', '<=', DB::raw('now() - interval 8 hour'))
->whereIn('account_id', $id)
->groupBy('account_id')
->orderBy('head_account_id')
->orderBy('account_id')
->orderBy('created_on', 'desc')
->get();
其中$ id是:
$id = DB::table('accounts')
->select('id')
->where('account_status','Approved')
->where('demo','0')
->get();
上面的查询正常工作-我已经使用dd()进行了检查。
我在$ appointments = .....-> get()时遇到错误
“类stdClass的对象无法转换为字符串”
我知道get()通常会返回一个stdClass对象,但是我不明白为什么我根本不能使用get()。许多其他解决方案说使用get()-> toArray();但是,我什至无法使get()正常运行。.如果不对结果运行get()并运行dd(),则会得到有关查询的信息数组,而不是结果本身。
我是Laravel / PHP的新手,所以我可能缺乏知识,但我希望有人能帮助我。
感谢您的光临!
答案 0 :(得分:1)
您可以尝试使用pluck()
检索ID值数组,即:
$id = DB::table('accounts')
->select('id')
->where('account_status','Approved')
->where('demo','0')
->pluck('id');
使用get()
,您将在$ id var中检索标准对象的集合。
答案 1 :(得分:0)
与遇到该错误的get方法无关。这是关于您试图对该查询的结果进行处理。如果您试图回显集合类的结果,则会抛出该错误。您无法回显对象吗?
根据文档:
get()返回一个集合对象。这意味着它具有结果数组。在您的情况下,它返回的集合对象包含对查询进行数学计算的任何记录ID
first()仅返回一个包含一个记录的结果
如果只希望返回一个id并可以将其视为string,以便可以在视图中回显它,则必须使用first()方法。
合并:
如果需要,id可以使用get(),并且必须对每个结果都进行循环。 如果您只想使用一个id,请使用first();
但是请注意,即使您首先使用它也会返回std类,因此在这种情况下,如果您要访问id。您必须写$result->id
并将其回显。
答案 2 :(得分:0)
在您的情况下,$id
是匹配数据的整行,并且只需要id列,因此您需要这样做
$id = DB::table('accounts')
->select('id')
->where('account_status','Approved')
->where('demo','0')
->get();
//The ID column
$id = $id->id;