[英]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.