Laravel ManyToMany withPivot Попытка получить свойство 'launch_at' не объекта - PullRequest
0 голосов
/ 05 июля 2019

У меня есть одно отношение ManyToMany между двумя моделями, когда я пытаюсь получить доступ к полю в моей сводной таблице, я получаю эту ошибку:

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

Я правильно следовал инструкциям в документации по Laravel.

Мои модели:

Экземпляр:

public function steps(): BelongsToMany
{
    return $this->belongsToMany(Step::class)
        ->using(InstanceStep::class)
        ->withTimestamps();
}

Шаг:

public function instances(): BelongsToMany
{
    return $this->belongsToMany(Instance::class)
        ->using(InstanceStep::class)
        ->withPivot([
            'started_at',
            'finished_at',
            'failed_at',
            'output',
        ])
        ->withTimestamps();
}

Как я пытаюсь получить доступ к значению Start_at шага:

dd($step->pivot->started_at);

РЕДАКТИРОВАТЬ

private function finishStep(Step $step)
{
    dd($step->pivot->started_at);
}

/** @var Step $step */
foreach ($this->workflow->steps as $step) {
    StepJob::dispatch($step, $instance);
}

dd ($ step)

Step {#420 ▼
  #table: "workflow_steps"
  #fillable: array:6 [▶]
  #casts: array:3 [▶]
  #connection: "mysql"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:10 [▼
    "id" => "ca646f59-b215-41b0-afe6-ea9e6174f4f5"
    "workflow_id" => "d786bd13-4111-4199-94d6-c52fef33b78b"
    "category" => "transport"
    "properties" => "props"
    "entity_type" => "App\TransportWorkflowStep"
    "entity_id" => "4d32e11c-6453-4f48-9419-7c5cbd647128"
    "order" => 1
    "created_at" => "2019-07-04 11:19:41"
    "updated_at" => "2019-07-04 11:41:16"
    "deleted_at" => null
  ]
  #original: array:10 [▶]
  #changes: []
  #dates: array:1 [▶]
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #guarded: array:1 [▶]
  #forceDeleting: false
}

Прикрепить шаг к экземпляру

// set started_at
$workflowInstance->workflowsteps()->attach(
        $step,
        [
            'started_at' => Carbon::now(),
        ]
    ); 

// do something

// set finished_at when done
dd($step->pivot->started_at);

Я сделал dd ($ step-> pivot-> start_at);чтобы увидеть, работаю ли я с правильной строкой поворота

Ответы [ 2 ]

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

Вы не указали связь, которую хотите установить, вы можете получить доступ к промежуточной таблице, используя атрибут pivot на моделях:

Попробуйте следующий код:

private function finishStep(Step $step)
{
    foreach ($step->instances as $instance) {
        var_dump($instance->pivot->started_at);
    }

    die();
}
0 голосов
/ 05 июля 2019

Это зависит от того, как объявить $ step, он получает коллекцию, и вы должны вставить ее в цикл foreach.

private function finishStep(Step $step)
{
    dd($step->pivot->started_at);
}

это не объявляет $ step, сначала вы должны объявить его как

$step=Step::where(...)->get(); 

и тогда вы можете dd($step);

короче - объект еще не существует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...