Laravel отображает данные из одной таблицы базы данных с помощью идентификатора этой строки

Так что у меня есть столpages, который выглядит так:

public function up()
    {
        Schema::create('pages', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->string('name');
            $table->integer('category')->unsigned();
]        });

        Schema::table('pages', function($table) {
            $table->foreign('user_id')->references('id')->on('core_users')
                ->onUpdate('cascade')->onDelete('cascade');
            $table->foreign('category')->references('id')->on('ecommerce_payment_pages_categories')
                ->onUpdate('cascade')->onDelete('set null');

        });
    }


    public function down()
    {
        Schema::drop('pages');
    }

И столcategories, похожий на этот:

public function up()
    {
        Schema::create('ecommerce_payment_pages_categories', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('core_users')
                ->onUpdate('cascade')->onDelete('cascade');
            $table->string('name');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('categories');
    }

pages modelВыглядит так:

class Pages extends Model
{

    protected $table = 'pages';


    public function user() {
        return $this->belongsTo("AppUser");
    }

    protected $fillable = [

    ];

    protected $casts = [

    ];

    public function categories() {
        return $this->belongsTo("AppModelsCategories");
    }
}

И categories modelвыглядит так:

class PaymentPagesCategories extends Model
{
    protected $table = 'categories';

    public function user() {
        return $this->belongsTo("AppUser");
    }

    protected $fillable = [

    ];

    protected $casts = [

    ];

    public function pages_categories() {
        return $this->hasMany("AppModelsPages");
    }
}

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

public function getGet()
{
    return response()->json(['success' => true, 'payment_pages' => Auth::user()->payment_pages()->orderBy('id', 'ASC')->get()]);
}

Таким образом, для текущего аутентифицированного пользователя я показываю все данные из таблицы базы данных страницы.
Сразу после того, как пользователь выбирает категорию из моего select, я сохраняю в таблице category colum в таблице pages идентификатор категории. Мне нужно сделать запрос, чтобы отобразить в другом представлении в html соответствующий идентификатор категории, сохраненный в таблице pages

1 ответ

  1. Столбец Category в переносе страницы не имеет значения allow null.
    Чтобы разрешить значения null, добавьте nullable column modifier к столбцу category.
    Остальная часть кода выглядит нормально.

    Миграция Страниц:

    public function up()
    {
        Schema::create('pages', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->string('name');
            $table->integer('category')->unsigned()->nullable(); // <= add this modifier
        });
    
        Schema::table('pages', function($table) {
            $table->foreign('user_id')->references('id')->on('core_users')
                ->onUpdate('cascade')->onDelete('cascade');
            $table->foreign('category')->references('id')->on('ecommerce_payment_pages_categories')
                ->onUpdate('cascade')->onDelete('set null');
    
        });
    }