laravel - ErrorException 数组到字符串的转换
laravel - ErrorException Array to string conversion
我正在尝试弄清楚如何将 $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');
}
注意到您是如何为每个字段执行一个查询的吗?此外,您在每个查询中都会得到一个数组,因为 DB::select returns 一个包含一行的数组,而不是您想象的直接的行。
我会为此使用查询生成器以获得更优雅的解决方案:
$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 函数为您提供它在 table 基础上找到的第一个寄存器,相当于 "where id=$clientid"
你可以走得更远,也可以使用 Eloquent 插入,这样:
$task = new Task;
$task->lastname = $client->lastname;
$task->firstname = $client->firstname;
$task->save();
或:
$task = Task::insert($data);
其中 Task 是一个模型,如前所述。
非常感谢@JoeGalind1!解决方案非常简单,我必须使用内置查询生成器。而不是使用旧式查询。
这是对我有用的解决方案!
$client = DB::table('clients')->select('*')->where('id', $clientid)->first();
一旦你做了这个查询,你就可以像这样轻松地调用它:
$data=array(
"residence"=>$client->residence,
);
现在字符串转换和数组插入时没有问题了。
我正在尝试弄清楚如何将 $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');
}
注意到您是如何为每个字段执行一个查询的吗?此外,您在每个查询中都会得到一个数组,因为 DB::select returns 一个包含一行的数组,而不是您想象的直接的行。
我会为此使用查询生成器以获得更优雅的解决方案:
$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 函数为您提供它在 table 基础上找到的第一个寄存器,相当于 "where id=$clientid"
你可以走得更远,也可以使用 Eloquent 插入,这样:
$task = new Task;
$task->lastname = $client->lastname;
$task->firstname = $client->firstname;
$task->save();
或:
$task = Task::insert($data);
其中 Task 是一个模型,如前所述。
非常感谢@JoeGalind1!解决方案非常简单,我必须使用内置查询生成器。而不是使用旧式查询。
这是对我有用的解决方案!
$client = DB::table('clients')->select('*')->where('id', $clientid)->first();
一旦你做了这个查询,你就可以像这样轻松地调用它:
$data=array(
"residence"=>$client->residence,
);
现在字符串转换和数组插入时没有问题了。