Нулевое значение обработчика в циклической функции (Foreach) Laravel - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь получить все значения в первой строке years таблицы (поле: colom_year) и поместить в поле year_start в таблице researches.Поэтому я использую это:

use App/Research;
use App/Year;

public function updateDatabaseYearStartResearch()
{
    $researchs = Research::all();
    foreach($researchs as $r)
    {
            $yearNew = Year::where('research_id', $r->id) != null ? Year::where('research_id', $r->id)->first()->colom_year : 0;
            //dd($yearNew);
            $Riset = Research::find($r->id);
            $Riset->year_start =  $yearNew ;
            $Riset->save();
    }
}

Когда я dd($yearNew), я получаю значение, поэтому я думаю, что я использую истинный запрос.Но когда я комментирую dd($yearNew) для запуска моей функции, я получаю сообщение об ошибке, подобное этому:

Попытка получить свойство 'colom_year' не-объекта

Я думаю, что этоошибка, потому что в таблице years есть значение null, поэтому я использую этот запрос для обработки ошибки: $yearNew = Year::where('research_id', $r->id) != null ? Year::where('research_id', $r->id)->first()->colom_year : 0;

Но я получаю ту же ошибку.Как исправить эту ошибку?

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Year::where('research_id', $r->id) является экземпляром Builder , а не результатом самого запроса, поэтому он не будет нулевым.Что вы хотите сделать, это:

$years = Year::where('research_id', $r->id)->get();
$yearNew = $years->isEmpty() ? 0 : $years->first()->colom_year;
0 голосов
/ 18 февраля 2019

Вместо этого вы должны использовать instanceof, чтобы проверить, является ли Year допустимым объектом:

use App/Research;
use App/Year;

public function updateDatabaseYearStartResearch()
{
    $researchs = Research::all();
    foreach ($researchs as $r)
    {
        $yearNew = 0;
        $yearModel = Year::where('research_id', $r->id)->first();
        if($yearModel instanceof Year && isset($yearModel->colom_year)){
            $yearNew = $yearModel->colom_year;
        }
        //dd($yearNew);
        $Riset = Research::find($r->id);
        $Riset->year_start = $yearNew;
        $Riset->save();
    }
}
0 голосов
/ 18 февраля 2019
<?php 

$year = Year::where('research_id', $r->id)->first();

$yearNew = $year ? $year->colom_year ?? 0 : 0;
  • Выше будет проверять, содержит ли $ year значение, если его значение равно NULL, тогда присваивать 0
  • Если $year является допустимым экземпляром Year, имеющим данные, но если он не содержит столбец colom_year затем снова назначьте 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...