2

我试图弄清楚如何将 $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');
}
4

2 回答 2

0

请注意您是如何对每个字段进行一次查询的?此外,您在每个查询中都会获得一个数组,因为 DB::select 返回一个包含一行的数组,而不是您认为的直接行。

我会为此使用 Query Builder 以获得更优雅的解决方案:

$client = DB::table('clients')->where('id', $clientid)->first();

这样,您就有了一个名为 $client 的对象,其中包含该行中的所有字段。然后,您可以按如下方式更新该行:

$data = [
   'lastname' => $client->lastname,
   'firstname' => $client->firstname
];

你甚至可以通过使用模型使它更“Laravel”。

应用程序/模型/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 是一个模型,如前所述。

于 2020-05-23T13:31:57.260 回答
0

非常感谢@JoeGalind1!解决方案非常简单,我不得不使用内置的查询生成器。而不是使用老式查询。

这是对我有用的解决方案!

$client = DB::table('clients')->select('*')->where('id', $clientid)->first();

进行此查询后,您可以像这样轻松地调用它:

$data=array(
        "residence"=>$client->residence,
            );

现在,当您需要在之后插入时,字符串转换和数组都没有问题。

于 2020-05-23T13:52:42.203 回答