функция сохранения без сохранения данных в базу данных - PullRequest
0 голосов
/ 19 октября 2019

У меня есть форма, в которой пользователь может вводить разные данные, форма состоит из двух частей.

enter image description here

Данные первой части будут сохранены втаблица с именем pages (работает отлично), данные второй части будут сохранены в таблице с именем parameters таблица parameters содержит столбец, содержащий повторяющееся имя-данные (не работает),

Вот как должна выглядеть таблица.

enter image description here

Я создал таблицу PIVOT table для paramaters и prebids следующим образом.

prebid_parameter,

public function up()
{
    Schema::create('prebid_parameter', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('prebid_id')->unsigned();
        $table->foreign('prebid_id')->references('id')->on('prebids');
        $table->bigInteger('parameter_id')->unsigned();
        $table->foreign('parameter_id')->references('id')->on('parameters');
    });
}

И page_prebid вот так.

public function up()
{
    Schema::create('page_prebid', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('page_id')->unsigned();
        $table->foreign('page_id')->references('id')->on('pages');
        $table->bigInteger('prebid_id')->unsigned();
        $table->foreign('prebid_id')->references('id')->on('prebids');

    });
}

И я создал такие отношения вот так.

Модель страницы.

class Page extends Model
{
    protected $fillable =[
        "title",
        "articles",
        "status"
    ];
    public function prebids(){
        return $this->belongsToMany('App\Prebid');
    }
}

Модель с предоплатой.

class Prebid extends Model
{
    protected $fillable =["bidders_name"];

    public function parameters(){

        return $this->belongsToMany('App\Parameter');
    }
    public function pages(){

        return $this->belongsToMany('App\Page');
    }
}

И модель параметров выглядит следующим образом.

class Parameter extends Model
{
    protected $fillable =[
        "params_name",
        "params_value",
        "bidders_name"
    ];
    public function prebids(){
        return $this->belongsToMany('App\Prebid');
    }
}

И, наконец, у меня есть функция сохранения контроллера страницы для сохранения данных подобным образом.

 public function store(Request $request)
    {
        $page = Page::create([
            'title' => $request->get('title'),
            'articles' => $request->get('articles'),
            'status' => $request->get('status'),
        ]);

        $page->save();

        $page->tags()->sync($request->tags, false);
        $page->prebids()->sync($request->prebids, false);

        return redirect("/pages")->with("sucess", "data saved");
    }

Когда я добавляю dd($request) функцию магазина, я получаю следующее

enter image description here

Note: parameter and prebid controllers are just empty

Теперь, когда я нажимаюКнопка «Отправить»: только первая часть данных сохраняется в базе данных, остальные не сохраняются в базе данных.

Вот репозиторий: демо

Что я делаю не такс моим кодом? Я новичок в Laravel, хотя.

1 Ответ

2 голосов
/ 19 октября 2019

Пара вещей выпрыгивают. Я не вижу фактического отношения для tags в модели, которую вы отобразили. Есть ли у вас отношения на Page для tags?

Также эта строка:

$page->prebids()->sync($request->prebids, false);

ищет входные данные из запроса на prebids, ноЯ не вижу этого в вашем объекте запроса. Я вижу params_value, который не будет отправлен методу sync (). И поэтому не синхронизироваться.

Попробуйте:

$page->prebids()->sync($request->params_value, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...