Вызов неопределенного метода Illuminate \ Database \ Eloquent \ Relations \ HasMany :: withTimestamps () - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь создать отношения в laravel с метками времени. У меня есть это приложение, которое позволяет клиентам запрашивать работу на рынке. Когда фрилансер на рынке находит работу, в которой он заинтересован, он предлагает завершить работу, и в таблицу фрилансера запрашивается новая строка.

Вот код, создающий отношение:

$marketplace->freelancers()->create([
   'request_id' => $id,
   'user_id' => $user->id
]);

Вот код отношения модели Marketplace:

    /**
     * A request may have multiple freelancers
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function freelancers()
    {
        return $this->hasMany('App\Models\MainFreelancers')->withTimestamps();
    }

Вот код отношений модели фрилансера:

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function mainMarketplace()
{
    return $this->belongsTo('App\Models\MainMarketplace');
}

При попытке запустить самый первый блок кода я получаю эту ошибку Laravel: BadMethodCallException Call to undefined method Illuminate\Database\Eloquent\Relations\HasMany::withTimestamps()

В краткосрочной перспективе я просто вручную добавил strtotime(), но я бы предпочел использовать то, что предлагает Laravel. У кого-нибудь есть предложения?

Примечание. У меня есть ссылка на предыдущий вопрос stackoverflow: Отметки времени не обновляются при присоединении данных в сводной таблице Но, к сожалению, это не помогло.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Если вы хотите, чтобы ваша сводная таблица автоматически поддерживалась метки времени созданного и обновленного, используйте метод withTimestamps для определение отношения:

return $this->belongsToMany('App\Role')->withTimestamps();

Красноречивые отношения.

Если принадлежит многим отношениям, withTimestamps() автоматически управляет вашими временными метками. Но вы реализуете с множеством отношений, поэтому у вас есть прямой доступ к временным меткам.

В этом случае вы можете использовать аксессор в вашей модели для форматирования даты:

public function getCreatedAtAttribute()
    {
        return date("l jS \of F Y h:i:s A", strtotime($this->attributes['created_at']));
    } 
0 голосов
/ 03 ноября 2018

withTimestamps(); используется в отношениях «многие ко многим», где требуется объявить, что в таблице соединения есть столбцы create_at и updated_at.

$ withTimestamps Указывает, доступны ли метки времени в сводной таблице.

Как правильно указывает исключение, Illuminate\Database\Eloquent\Relations\HasMany не имеет метода withTimestamps().

https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Relations/HasMany.html

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