繁体   English   中英

laravel 5.4雄辩的创建

[英]laravel 5.4 eloquent create

我在使用create将记录插入数据库表时遇到问题。

            // insert as chunks
            foreach (array_chunk($mainArr, 1000) as $chunk) {
                UnassignedTask::insert($chunk);
            }
            // insert as chunks
            foreach (array_chunk($matchUnmatchArr, 1000) as $chunk) {
                ProductMatchUnmatch::insert($chunk);
            }

            // for now ... remove this later.. in development
            $apiBody['status'] = "Completed";
            $projectsResponse = $this->postRemoteData($this->apiBaseUrl, 'search/searchprojectsbyclientdatestatus/?limit=500&offset=0', $apiBody, 'POST');            
            $prjResArr = json_decode($projectsResponse, true);
            $projects = $prjResArr['results'];
            foreach($projects as $pjt) {
                if($pjt['id'] != $reqId) {
                    continue;
                }
                $project = Project::where('project_id', intval($reqId))->first();
                if (!$project) {
                    //dd($pjt);
                    Project::create([
                        'client_code' => $pjt['client_name'],
                        'project_id' => $pjt['id'],
                        'file_name' => $pjt['file_name'],
                        'total_records' => $pjt['total_records'],
                        'total_unique_products' => $pjt['total_unique_products'],
                        'uploaded_datetime' => $pjt['start_date'],
                        'created_at' => $created_at,
                        'updated_at' => $updated_at
                        ]);

                }
            }

问题出在Project::create ,该记录未插入。

请注意,在插入projects之前,还要在不同的表中执行其他两个批量insert事务: UnassignedTask::insert()ProductMatchUnmatch:insert()

如果我评论这些,那么Project::create可以工作。

但是对于这些未注释的Project::create无法正常工作。

编辑:

Project.php

class Project extends Model
{
    protected $table = 'projects';
    protected $fillable = ['client_code', 'project_id', 'file_name', 'total_records', 'total_unique_products', 'uploaded_datetime', 'created_at', 'updated_at'];
}

我想念什么?

您可以使用Model :: create()创建实例。 它的工作方式与make相同,但不保存。

可能有不同的方式:您可以在不保存的情况下使用质量分配。

请记住,首先在模型中设置$ fillable属性。

方式1 :使用方法fill

$model = new YourModel;

$model->fill([
    'field' => 'value',
    'another_field' => 'another_value'
]);

$model->save();

方式2 :使用构造函数

$model = new YourModel([
    'field' => 'value',
    'another_field' => 'another_value'
]);

$model->save();

方式三 :就像您当前的代码一样

$model = YourModel::create([
    'field' => 'value',
    'another_field' => 'another_value'
]);

尝试将其用作对象:

$obj = new \App\Project;
$obj->client_code = $pjt['client_name'];
$obj->project_id = $pjt['id'];
...
$obj->save();

首先更改您的if语句块,因为first()不返回布尔值。 它返回object或null。 所以你应该检查为空

 if(is_null($project))
  {
   // your create code 
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM