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)

Laravel ErrorException,执行多个动态下拉

Laravel 播种机卡住并返回 ErrorException 数组到字符串转换