带有Pivot的Laravel 5.5 CRUD请求

时间:2018-01-20 18:00:25

标签: laravel crud query-builder

我正在尝试使用Laravel 5.5中的3个表和数据透视表制作CRUD ... - 管理员(这是一个带登录系统的用户表) - 部门 - 朗斯 - 郎部门

管理员表格:

Schema::create('admins', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('surname');
    $table->string('email')->unique();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
    $table->softDeletes();
});

The Sectors表:

Schema::create('sectors', function (Blueprint $table) {
    $table->increments('id');
});

Langs表:

Schema::create('langs', function (Blueprint $table) {
    $table->increments('id');
    $table->string('isocode', 10)->nullable();
    $table->string('langname', 80)->nullable();
    $table->timestamps();
});

lang_sector表(数据透视表):

Schema::create('lang_sector', function (Blueprint $table) {
    $table->integer('lang_id')->index('FK_LANGS');
    $table->integer('sector_id')->index('FK_SECTORS');
    $table->integer('admin_id')->index('FK_ADMINS');
    $table->string('sectorname', 80);
    $table->string('sectorshortname', 40)->nullable();
    $table->text('sectordescription', 65535)->nullable();
    $table->timestamps();
    $table->softDeletes();
    $table->primary(['lang_id','sector_id','admin_id']);
});

事实上,有关“部门”的所有信息都存储在数据透视表中......

我还在模型中创建了链接(admin,lang,sector):

在郎模型中:

public function sectors(){
    return $this->belongsToMany('App\Sector')
        ->withPivot('sectorname','sectorshortname','sectordescription', 'created_at', 'updated_at', 'deleted_at');
}

在行业模型中:

public function langs(){
    return $this->belongsToMany('App\Lang')
        ->withPivot('sectorname','sectorshortname','sectordescription', 'created_at', 'updated_at', 'deleted_at');
}

public function admin(){
    return $this->belongsTo('App\Admin');
}

在管理员:

public function sectors(){
    return $this->hasMany('App\Sector');
}   

为了显示数据,我使用控制器并准备我的请求:

public function index() {
    $langs = Lang::all();
    $admins = Admin::all();
    $sectors = DB::table('lang_sector')
        ->join('langs', 'langs.id', '=', 'lang_sector.lang_id')
        ->join('sectors', 'sectors.id', '=', 'lang_sector.sector_id')
        ->join('admins', 'admins.id', '=', 'lang_sector.admin_id')
        ->select(
            'sectors.id', 'lang_sector.sector_id','lang_sector.lang_id','lang_sector.admin_id','langs.langname',
            'langs.isocode','lang_sector.sectorname','lang_sector.sectorshortname','admins.adminname','admins.adminsurname',
            'lang_sector.created_at','lang_sector.updated_at')
        ->distinct()->orderByRaw('lang_sector.sector_id')->get();

    return view('admin.sectors.sectors',compact('sectors', 'langs', 'admins'));
}

从技术上讲,我坚持使用商店方法......

关于create方法,我只需要返回一个视图:

public function create()    {
    return view('admin.sectors.create');
}

我怀疑存储方法和视图......

public function store(Request $request)    {
    $this->validate($request, [
        'lang_id',
        'sector_id',
        'admin_id',
        'sectorname',
        'sectorshortname',
        'sectordescription',
    ]);

    $input = $request->all();
    Sector::create($input);
    Session::flash('flash_message', 'Secteur Ajouté!');
    return redirect()->route('sectors.index');
}

我以这种方式获得管理员ID:

<input type="hidden" value="{{Auth::guard('admin')->user()->id}}" >

理想情况下,我希望同时为每个lang创建一个条目... 或者在DB ...中创建与主翻译条目的关系

我正试图找出如何解决这个问题,但不成功...... 谢谢你的帮助

0 个答案:

没有答案