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,
            );

现在字符串转换和数组插入时没有问题了。