laravel - ErrorException 数组到字符串的转换
Posted
技术标签:
【中文标题】laravel - ErrorException 数组到字符串的转换【英文标题】:laravel - ErrorException Array to string conversion 【发布时间】:2020-09-10 07:49:23 【问题描述】:我试图弄清楚如何将 $residence 之类的查询结果放入数据数组中。因为我这样做会给我错误数组到字符串的转换。有什么办法可以将查询结果转成普通字符串?
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function insert(Request $request)
$id = auth()->user()->id;
$title = $request->input('title');
$clientid = $request->input('client');
$startdate = $request->input('startdate');
$enddate = $request->input('enddate');
$starttime = $request->input('starttime');
$endtime = $request->input('endtime');
$description = $request->input('description');
$firstname = DB::select('select firstname from clients where id='.$clientid);
$lastname = DB::select('select lastname from clients where id='.$clientid);
$housing = DB::select('select housing from clients where id='.$clientid);
$housenr = DB::select('select housenr from clients where id='.$clientid);
$residence = DB::select('select residence from clients where id='.$clientid);
$residencestring = json_encode($residence);
$data=array(
"uuid"=>$id,
"title"=>$title,
"residence"=>$residencestring,
"startdate"=>$startdate,
"enddate"=>$enddate,
"starttime"=>$starttime,
"endtime"=>$endtime,
"description"=>$description,
"firstname"=>$firstname,
"lastname"=>$lastname,
"housing"=>$housing,
"housenr"=>$housenr
);
//dd($data);
DB::table('tasks')->insert($data);
return redirect('/todo');
【问题讨论】:
$residence = DB::select('select residence from clients where id='.$clientid)->toSql()
等等,您是要整个查询还是只查询住宅名称?
所以我有这些查询$firstname = DB::select('select firstname from clients where id='.$clientid); $lastname = DB::select('select lastname from clients where id='.$clientid); $housing = DB::select('select housing from clients where id='.$clientid); $housenr = DB::select('select housenr from clients where id='.$clientid); $residence = DB::select('select residence from clients where id='.$clientid);
,它们需要是字符串才能插入它
因为现在查询结果是以数组形式给出的
【参考方案1】:
注意您是如何对每个字段进行一次查询的?此外,您在每个查询中都会获得一个数组,因为 DB::select 返回一个包含一行的数组,而不是您想象的直接该行。
我会为此使用查询生成器以获得更优雅的解决方案:
$client = DB::table('clients')->where('id', $clientid)->first();
这样,您就有了一个名为 $client 的对象,其中包含该行的所有字段。 然后,您可以按如下方式更新该行:
$data = [
'lastname' => $client->lastname,
'firstname' => $client->firstname
];
您甚至可以通过使用模型使其更“Laravel”。
App/Models/Client.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Client extends Model
protected $guarded = ['id'];
那么您的代码将如下所示:
<?php
use App\Models\Client;
public function insert(Request $request)
....
$client = Client::findOrFail($clientid);
$data = [
'lastname' => $client->lastname,
'firstname' => $client->firstname
];
....
findOrFail 函数为您提供它在基于表的表中找到的第一个寄存器,相当于“where id=$clientid”
你可以更进一步,也可以使用 Eloquent 插入,如下所示:
$task = new Task;
$task->lastname = $client->lastname;
$task->firstname = $client->firstname;
$task->save();
或:
$task = Task::insert($data);
其中 Task 是如前所述的模型。
【讨论】:
我想你误会了我,居住地、名字、姓氏、住房和房屋是客户表中的列。例如,id = 1 的行是我想从中获取这些值的行。3 是的。确切地。您有一个名为“clients”的表,其中包含 firstname、lastname 列。然后使用提供的代码,您可以从某个 id 获取所有字段,并且可以在该 $client 对象中使用它们。您不需要对每个字段进行一次查询,一次查询即可获得所有字段 我找到了!十分感谢!我只需要用“*”替换居住地! 哦,是的,你是对的.. 或者你可以一起删除 select 语句。查看我建议的其他选项。从长远来看,它会导致非常干净的代码。如果对您有帮助,请标记为已回答。【参考方案2】:非常感谢@JoeGalind1!解决方案非常简单,我不得不使用内置的查询生成器。而不是使用老式查询。
这是对我有用的解决方案!
$client = DB::table('clients')->select('*')->where('id', $clientid)->first();
一旦你做出了这个查询,你就可以像这样轻松地调用它:
$data=array(
"residence"=>$client->residence,
);
现在以后需要插入时,字符串转换和数组都没有问题了。
【讨论】:
以上是关于laravel - ErrorException 数组到字符串的转换的主要内容,如果未能解决你的问题,请参考以下文章
laravel - ErrorException 数组到字符串的转换
laravel 5.5:php artisan tinker:ErrorException:目录不为空[重复]
StreamBuffer.php 第 95 行中的 ErrorException:在 laravel 5 中
Laravel 6 ErrorException 未定义变量:用户(...home.blade.php)