我正在尝试使用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) {
}
}
我想要“索引”:
在“创建”
中我真的很喜欢使用Laravel,但我还需要更多练习:) 谢谢你的帮助
答案 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
我显示数据......