【问题标题】:Relationship to choose correct language from database从数据库中选择正确语言的关系
【发布时间】:2017-03-19 18:36:00
【问题描述】:

我的代码基于此代码Stackoverflow

我有 3 个导航表(这是迁移):

    Schema::create('navigation_positions', function (Blueprint $table) {
            $table->increments('id');
            $table->string('slug')->unique();
    });

    Schema::create('navigation', function (Blueprint $table) {
        $table->increments('id');
        $table->string('slug')->unique();
        $table->string('icon')->nullable();
        $table->string('url')->nullable();
        $table->integer('sort')->nullable()->default(NULL);
        $table->integer('parent_id')->unsigned()->nullable();
        $table->integer('position_id')->unsigned();
        $table->timestamps();

        $table->foreign('position_id')->references('id')->on('navigation_positions')
            ->onDelete('restrict');

    });

    Schema::create('navigation_translate', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->integer('navigation_id')->unsigned();
        $table->integer('language_id')->unsigned();
        $table->timestamps();

        $table->foreign('navigation_id')->references('id')->on('navigation')
            ->onDelete('cascade');

        $table->foreign('language_id')->references('id')->on('languages')
            ->onDelete('restrict');
    });

我会将记录插入navigation,因为我的网站是多语言的(language_id 存储在language 会话中)我会将翻译的语言存储在navigation_translate

我想根据我的language_idnavigation_positions.slugnavigation_translate中选择正确的记录。

例如这是我的记录:

navigation_positions

["id" => 1, "slug" => "admin-sidebar"]

navigation_translate

["id" => 1, "title" => "User Management", "navigation_id" => 1, "language_id" => 1]

我想用language_id = 1选择admin-sidebar位置的所有父母和孩子

【问题讨论】:

    标签: php laravel model


    【解决方案1】:

    如果我理解了这个问题,我认为这可能是一个正确的答案。 with() 方法允许您预先加载关系:

    NavigationPosition::where('slug','some-slug')
        ->with(['navigation' => function ($query) {
            $query->with(['navigationTranslate' => function ($query) {
                $query->where('language_id',1);
            }]);
        }])->get();
    

    参考:Laravel Documentation

    【讨论】:

    • 谢谢,但对我不起作用:(我想同时从 3 个表中选择记录
    • 我编辑了我的回复,你可以试试这样的(未测试)
    猜你喜欢
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多