laravel 5.5带旋转台的CRUD

时间:2018-01-09 20:00:56

标签: laravel eloquent crud

我正在尝试使用Laravel 5.5中的2个表和数据透视表创建一个CRUD。

我用这种方式创建了模型,控制器和迁移:

第一步:管理应用程序中使用的Lang

php artisan make:controller LangController --resource -model=Lang
php artisan make:migration create_Langs_table

第二步:管理文章中创建的文章

php artisan make:controller ArticleController --resource -model=Article
php artisan make:migration create_articles_table

第三步:我创建数据透视表

php artisan make:migration create_article_lang_table

第四步:我创建了路线

Route::resource('/articles', 'ArticleController');

第五步:我在模型中创建了关系:

在文章模型中:

public function langs(){
    return $this->belongsToMany('App\Lang')->withPivot('name','shortname','description')->withTimestamps();
}

在Lang模型中:

public function articles(){
    return $this->belongsToMany('App\Article')->withPivot('name','shortname','description')->withTimestamps();
}

我还修改了数据透视表,因为它包含特定的字段

class CreateLangSectorTable extends Migration
{
    public function up()
    {
        Schema::create('article_lang', function (Blueprint $table) {
            $table->integer('lang_id');
            $table->integer('article_id')->index('FK_ARTICLE');
            $table->string('name', 80)->nullable();
            $table->string('shortname', 40)->nullable();
            $table->text('description', 65535)->nullable();
            $table->primary(['lang_id','sector_id']);
        });
    }

    public function down()
    {
        Schema::dropIfExists('langs_sectors');
    }
}

当我想在ArticleController中创建我的CRUD时,我就陷入了困境。我尝试在ArticleController中进行修改但没有成功。所以我删除了所有内容。

class ArticleController extends Controller
{
    // Display a listing of the resource.
    public function index() {
    }

    // Show the form for creating a new resource.
    public function create() {
    }
    // Store a newly created resource in storage.
    public function store(Request $request) {
    }

    // Display the specified resource.
    public function show($id) {
    }

    // Show the form for editing the specified resource.
    public function edit($id) {
    }

    // Update
    public function update(Request $request, $id) {
    }

    // Remove the specified resource from storage.
    public function destroy($id) {
    }
}

我想要“索引”:

  • 显示一个表格:name,shortname,description
  • 按语言过滤或以特定语言显示文章

在“创建”

  • 我想在lang中创建一篇文章
  • 我想创建一篇文章,这是另一篇文章的翻译

我真的很喜欢使用Laravel,但我还需要更多练习:) 谢谢你的帮助

3 个答案:

答案 0 :(得分:3)

  

我想要"索引"显示一个表格:名称,短名称,描述以及按语言过滤或以特定语言显示文章

加载数据并将其传递给视图:

$lang = Lang::find($id);
$articles = $lang->articles()->get();
return view('articles.index', ['articles' => $articles]);

显示数据:

@foreach ($articles as $article)
    {{ $article->pivot->name }}
    {{ $article->pivot->shortname }}
@endforeach
  

在"创建"我想在lang中创建一篇文章,我想创建一篇文章,它是另一篇文章的翻译

确保您已将$fillable数组添加到Article模型中。创建一篇文章:

$lang = Lang::find($id);
$article = $lang->articles()->create(['columnInArticlesTable' => $request->something]);

然后使用attach()方法创建翻译:

$lang->articles()->attach($article->id, ['name' => $request->name, 'shortname' => $request->shortname]);

答案 1 :(得分:1)

我部分地解决了我关于这个问题的问题......关于索引方法,我有:

public function index() {
    $countLang = Lang::count();
    $countArticle = Article::count();
    for ($i=1; $i<=$countLang; $i++) {
        $lang = Lang::find($i);
        $article[$i] = $lang->article()->get();
    }
    return view('admin.pages.articles.index', compact('articles', 'countLang', 'countSector'));
}

它生成正确的SQL请求......但是我仍然有问题要在视图中获取所有数据...我应该能够看到每个lang中的每篇文章...

答案 2 :(得分:0)

最后我在我看来这样做了:

@foreach ($articles as $article)
    @for($i=0; $i < $countArticle; $i++)
        {{  $article[$i]->pivot->sectname }}<br>
    @endfor
@endforeach

我显示数据......