Косвенная модификация перегружена на Laravel - Отношения - PullRequest
0 голосов
/ 10 апреля 2020

Я использую Laravel 5, и у меня есть 2 таблицы:

  • Таблица «Link» с 7 столбцами, один из которых - столбец «image_id».
  • «Image» Таблица, в этой таблице у меня есть два столбца: «id» и «url».

Я хочу обновить базу данных Link, а также URL-адрес соответствующего изображения с помощью одного метода обновления.

Я пробовал этот код:

public function update(Request $request, $id)
{
    // Validate the data
    $link = Link::find($id);

    $this->validate($request, array(
            'title' => 'required|max:255',
            'link'  => 'nullable',
            'description'  => 'required'
    ));


    $link = Link::find($id);

    $link->title = $request->input('title');
    $link->link = $request->input('link');
    $link->description = $request->input('description');
    $link->linkImage->url = 'testurl';

    $link->save();

    Session::flash('success', "Le lien à été correctement mis à jour.");

    return redirect()->route('links.index');
}

Это мой класс ссылок:

<?php

namespace App\Models\Services;

use Illuminate\Database\Eloquent\Model;

class Link extends Model
{

/**
 * The table associated with the model.
 *
 * @var string
 */
protected $table = 'service_rubrique_link';

protected $fillable = ['title','description','ordre','image_id'];


public function linkImage() 
{
    return $this->belongsTo('App\Models\Storage\Imageup');
}

}

И мой класс изображений:

<?php

namespace App\Models\Storage;

use Illuminate\Database\Eloquent\Model;

class Imageup extends Model
{

/**
 * The table associated with the model.
 *
 * @var string
 */
protected $table = 'image';

protected $fillable = ['id','url'];

public function servlinks() 
{
    return $this->hasMany('App\Models\Services\Link');
}

}

Когда я хочу сохранить у меня эту ошибку:

Косвенное изменение перегруженного свойства

App \ Models \ Services \ Link :: $ linkImage не действует

Do Вы имеете представление о том, что не так с моим кодом?

Спасибо.

1 Ответ

0 голосов
/ 10 апреля 2020

Как говорится в сообщении, свойство является загруженной подмоделью. Обновление не делает vvsense ... вы должны использовать его как метод (построитель запросов) linkimage (), а затем использовать, например, -> update (['propertyname' => 'value'])

См. https://laravel.com/docs/7.x/eloquent-relationships#inserting и-обновление связанных-модели

...