Laravel 5.5 - вызов функции-члена sync() при нулевой ошибке

Я пытаюсь сохранить почтовые изображения. Нет проблем с сохранением изображений или перемещением изображений в каталог для загрузки. Но в разделе sync мне выдает эту ошибку.

(У меня есть три таблицы. сообщения, медиа и сводная таблица)

Вот коды синхронизации;

$media = Media::where('created_at', '>=', Carbon::now()->subSecond(10))->pluck('id');

$post->media()->sync($media, true);

Медиа-модель;

public function posts(){

    $this->belongsToMany('App\Post','media_post','image_id','post_id');
}

и почтовая модель

public function media() {

    $this->belongsToMany('App\Media','media_post','post_id','image_id');
}

Любой совет ?


person Community    schedule 01.12.2017    source источник
comment
Учитывая, что кода не так много. Немного сложно диагностировать. Однако ошибка предполагает, что результат media() равен нулю. Я бы начал там. Возможно, var_dump.   -  person fantasitcalbeastly    schedule 02.12.2017
comment
Я проверил с помощью метода dd, он не нулевой.   -  person    schedule 02.12.2017


Ответы (1)


Вы не возвращаетесь от своего метода отношений. Вот почему.

public function media()
{
    $this->belongsToMany(...);
}

Это то, что вы делаете, у него нет return.

$n = null;
$n->sync(); // Call to a member function sync() on null

function a() { }
a()->sync(); // Call to a member function sync() on null

Это PHP. Вы определили метод, который ничего не возвращает, вы получите null, если вы его вызовете.

person lagbox    schedule 02.12.2017
comment
К сожалению, я не знаю, что мне нужно, чтобы добавить вопрос. Все кажется нормальным. - person ; 02.12.2017
comment
Вы правы, я должен добавить больше информации, но я не знал, какие коды мне нужны, чтобы прикрепить вопрос .. (теперь также отредактировал вопрос и добавил пост и медиа-модель) - person ; 02.12.2017
comment
у вас есть ответ, это сделано, вопросы окончены .... обсуждения больше нет ... прочитайте мой ответ, он объясняет, почему вы получаете «ноль» :) - person lagbox; 02.12.2017
comment
да, наверное, потому что с другой частью ошибки нет - person ; 02.12.2017
comment
это не "вероятно", это оно - person lagbox; 02.12.2017
comment
Что именно вы имеете в виду, когда вы определили метод, который ничего не возвращает? Сообщения или медиа-методы — это отношения. И теперь я синхронизирую их методом sync(). Переменная $media может быть нулевой, но это не так. при чем тут нуль? - person ; 02.12.2017
comment
они не являются методами «отношения», вы хотели бы, чтобы они были, но это не так, потому что они НЕ возвращают объект отношения. В ваших методах НЕТ return. Они return ничего. - person lagbox; 02.12.2017
comment
Сначала нужно сказать это, часы и часы я пытался понять, где ошибка :/ Но спасибо, наконец-то работает - person ; 02.12.2017
comment
первый комментарий к вашему вопросу предполагает, что media() возвращает значение null, затем вы говорите, что это не так... люди не могут вам помочь, когда вы говорите неправду - person lagbox; 03.12.2017
comment
Я думал, ты имеешь в виду переменную $media - person ; 03.12.2017