laravel 5.4 eloquent create - PullRequest
       4

laravel 5.4 eloquent create

0 голосов
/ 03 июля 2019

У меня проблема с вставкой записи в таблицу базы данных с помощью 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'];
}

Чего мне не хватает?

Ответы [ 3 ]

2 голосов
/ 03 июля 2019

Вы можете создавать экземпляры с Model :: create ().Он работает так же, как make, но не сохраняет его.

Возможны разные способы: вы можете использовать массовое назначение без сохранения.

Пожалуйста, не забудьте сначала установить $ fillableсвойство в вашей модели.

WAY # 1 : с помощью метода fill

$model = new YourModel;

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

$model->save();

WAY # 2 : с помощью конструктора

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

$model->save();

WAY # 3 : как ваш текущий код`

$model = YourModel::create([
    'field' => 'value',
    'another_field' => 'another_value'
]);
1 голос
/ 03 июля 2019

прежде всего измените блок оператора if, потому что first () не возвращает логическое значение.он возвращает объект или ноль.так что вы должны проверить на ноль

 if(is_null($project))
  {
   // your create code 
  }
1 голос
/ 03 июля 2019

Попробуйте вместо этого использовать в качестве объекта:

$obj = new \App\Project;
$obj->client_code = $pjt['client_name'];
$obj->project_id = $pjt['id'];
...
$obj->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...