李帅

1.又重构一言表,一对多已完成

...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
2 2
3 namespace App\Admin\Controllers; 3 namespace App\Admin\Controllers;
4 4
5 -use App\Admin\Renderable\VerseTable;
6 -use App\Admin\Repositories\OnePoem;
7 use App\Admin\Repositories\Verse; 5 use App\Admin\Repositories\Verse;
8 use App\Models\Author; 6 use App\Models\Author;
9 use App\Models\OnePoem2; 7 use App\Models\OnePoem2;
...@@ -13,7 +11,8 @@ use Dcat\Admin\Grid; ...@@ -13,7 +11,8 @@ use Dcat\Admin\Grid;
13 use Dcat\Admin\Layout\Content; 11 use Dcat\Admin\Layout\Content;
14 use Dcat\Admin\Show; 12 use Dcat\Admin\Show;
15 use Dcat\Admin\Http\Controllers\AdminController; 13 use Dcat\Admin\Http\Controllers\AdminController;
16 -use Illuminate\Http\Request; 14 +use Dcat\Admin\Widgets\Card;
15 +use Dcat\Admin\Widgets\Table;
17 16
18 class OnePoemController extends AdminController 17 class OnePoemController extends AdminController
19 { 18 {
...@@ -46,11 +45,12 @@ class OnePoemController extends AdminController ...@@ -46,11 +45,12 @@ class OnePoemController extends AdminController
46 $grid->column('id')->sortable(); 45 $grid->column('id')->sortable();
47 $grid->column('title'); 46 $grid->column('title');
48 $grid->column('author'); 47 $grid->column('author');
49 -// $grid->column('content'); 48 + $grid->column('','诗句组')
50 - $grid->verses('正文')->pluck('stanza')->label(); 49 + ->display('展开')
51 -// $grid->column('annotate'); 50 + ->expand(function (){
52 -// $grid->column('spelling'); 51 + $th = ['id','一言Id','正文','注释','拼音','英文','创建时间','修改时间'];
53 -// $grid->column('en'); 52 + return Table::make($th, $this->verses->toArray())->withBorder();
53 + });
54 $grid->column('created_at'); 54 $grid->column('created_at');
55 $grid->column('updated_at')->sortable(); 55 $grid->column('updated_at')->sortable();
56 56
...@@ -69,7 +69,7 @@ class OnePoemController extends AdminController ...@@ -69,7 +69,7 @@ class OnePoemController extends AdminController
69 */ 69 */
70 protected function detail($id) 70 protected function detail($id)
71 { 71 {
72 - return Show::make($id, new OnePoem(), function (Show $show) { 72 + return Show::make($id, new OnePoem2(), function (Show $show) {
73 $show->field('id'); 73 $show->field('id');
74 $show->field('title'); 74 $show->field('title');
75 $show->field('content'); 75 $show->field('content');
...@@ -90,7 +90,7 @@ class OnePoemController extends AdminController ...@@ -90,7 +90,7 @@ class OnePoemController extends AdminController
90 ->title($this->title()) 90 ->title($this->title())
91 ->description('注意:基础库中内容只做参考,创建的一言与其他表数据不耦合!理论上可自行组装句子,也可按诗词原文复制。') 91 ->description('注意:基础库中内容只做参考,创建的一言与其他表数据不耦合!理论上可自行组装句子,也可按诗词原文复制。')
92 // ->description($this->description()['create'] ?? trans('admin.create')) 92 // ->description($this->description()['create'] ?? trans('admin.create'))
93 -// ->body(Card::make($this->PoetryGrid())) 93 + ->body(Card::make($this->PoetryGrid()))
94 ->body($this->form()); 94 ->body($this->form());
95 } 95 }
96 96
...@@ -101,41 +101,24 @@ class OnePoemController extends AdminController ...@@ -101,41 +101,24 @@ class OnePoemController extends AdminController
101 */ 101 */
102 protected function form() 102 protected function form()
103 { 103 {
104 - return Form::make(new OnePoem(), function (Form $form) { 104 + $builder = OnePoem2::with(['verses']);
105 + return Form::make($builder, function (Form $form) {
105 $form->display('id'); 106 $form->display('id');
106 $form->text('title'); 107 $form->text('title');
107 $form->text('author'); 108 $form->text('author');
108 109
109 $form->hasMany('verses','诗句组', function (Form\NestedForm $form) { 110 $form->hasMany('verses','诗句组', function (Form\NestedForm $form) {
110 - $form->selectTable('verse_id','诗句') 111 + $form->textarea('content');
111 - ->title('字体选择') 112 + $form->textarea('annotate');
112 - ->from(VerseTable::make()) 113 + $form->textarea('spelling');
113 - ->model(\App\Models\Verse::class,'id','stanza'); 114 + $form->textarea('en');
114 - }); 115 + })->useTable();
115 116
116 $form->display('created_at'); 117 $form->display('created_at');
117 $form->display('updated_at'); 118 $form->display('updated_at');
118 }); 119 });
119 } 120 }
120 121
121 - public function store()
122 - {
123 - // 写 一言表
124 - $post = request()->all();
125 - $poem2 = OnePoem2::query()->create([
126 - 'title' => $post['title'],
127 - 'author' => $post['author'],
128 - ]);
129 -
130 - // 写关联表
131 - $verse_ids = [];
132 - foreach ($post['verses'] as $verse){
133 - $verse_ids[] = $verse['verse_id'];
134 - }
135 - $poem2->verses()->sync($verse_ids);
136 -
137 - return $this->form()->response()->success('添加成功')->redirect('/poem');
138 - }
139 122
140 protected function PoetryGrid() 123 protected function PoetryGrid()
141 { 124 {
...@@ -143,7 +126,7 @@ class OnePoemController extends AdminController ...@@ -143,7 +126,7 @@ class OnePoemController extends AdminController
143 $grid->model()->with(['poetry']); 126 $grid->model()->with(['poetry']);
144 127
145 $grid->column('id')->sortable(); 128 $grid->column('id')->sortable();
146 - $grid->column('author_id')->display(function (){ 129 + $grid->column('author_id','作者')->display(function (){
147 $id = $this->poetry_id; 130 $id = $this->poetry_id;
148 $poetry = Poetry::query()->find($id); 131 $poetry = Poetry::query()->find($id);
149 $author_id = $poetry->author_id; 132 $author_id = $poetry->author_id;
...@@ -156,12 +139,9 @@ class OnePoemController extends AdminController ...@@ -156,12 +139,9 @@ class OnePoemController extends AdminController
156 $grid->column('annotate')->copyable(); 139 $grid->column('annotate')->copyable();
157 $grid->column('spelling')->copyable(); 140 $grid->column('spelling')->copyable();
158 $grid->column('en')->copyable(); 141 $grid->column('en')->copyable();
159 -// $grid->column('created_at');
160 -// $grid->column('updated_at')->sortable();
161 -
162 142
163 $grid->withBorder(); 143 $grid->withBorder();
164 - $grid->quickSearch(['stanza'])->placeholder('快捷搜索诗句(节)'); 144 + $grid->quickSearch(['stanza'])->placeholder('快捷搜索诗节(支持模糊查询)');
165 145
166 $grid->paginate(5); 146 $grid->paginate(5);
167 $grid->simplePaginate(); 147 $grid->simplePaginate();
...@@ -169,17 +149,16 @@ class OnePoemController extends AdminController ...@@ -169,17 +149,16 @@ class OnePoemController extends AdminController
169 $grid->disableActions(); 149 $grid->disableActions();
170 $grid->disableCreateButton(); 150 $grid->disableCreateButton();
171 151
172 -
173 $grid->filter(function (Grid\Filter $filter) { 152 $grid->filter(function (Grid\Filter $filter) {
174 $filter->where('author_id',function ($query){ 153 $filter->where('author_id',function ($query){
175 $author = Author::query()->where('name','like',"%{$this->input}%")->get()->pluck('id'); 154 $author = Author::query()->where('name','like',"%{$this->input}%")->get()->pluck('id');
176 $poetry =Poetry::query()->whereIn('author_id',$author)->get()->pluck('id'); 155 $poetry =Poetry::query()->whereIn('author_id',$author)->get()->pluck('id');
177 $query->whereIn('poetry_id',$poetry); 156 $query->whereIn('poetry_id',$poetry);
178 - })->width(3); 157 + },'作者')->width(3);
179 $filter->like('poetry.name')->width(3); 158 $filter->like('poetry.name')->width(3);
180 $filter->like('stanza')->width(4); 159 $filter->like('stanza')->width(4);
181 $filter->panel(); 160 $filter->panel();
182 - 161 + $filter->expand();
183 }); 162 });
184 }); 163 });
185 } 164 }
......
...@@ -72,23 +72,17 @@ class PackPoemController extends AdminController ...@@ -72,23 +72,17 @@ class PackPoemController extends AdminController
72 */ 72 */
73 protected function form() 73 protected function form()
74 { 74 {
75 - return Form::make(new PackPoem(['poem']), function (Form $form) { 75 + return Form::make(PackPoem::with(['poem']), function (Form $form) {
76 $form->display('id'); 76 $form->display('id');
77 $form->text('title'); 77 $form->text('title');
78 $form->text('subtitle'); 78 $form->text('subtitle');
79 $form->text('left_text'); 79 $form->text('left_text');
80 $form->text('right_text'); 80 $form->text('right_text');
81 81
82 - if ($form->isEditing()) { 82 + $form->selectTable('poem.poem_id','一言')
83 - $form->display('poem.title'); 83 + ->title('一言诗词库')
84 - $form->display('poem.author'); 84 + ->from(PoemTable::make())
85 - $form->display('poem.content'); 85 + ->model(OnePoem::class, 'id', 'title');
86 - }else{
87 - $form->selectTable('poem_id')
88 - ->title('一言诗词库')
89 - ->from(PoemTable::make())
90 - ->model(OnePoem::class, 'id', 'title');
91 - }
92 86
93 $form->display('created_at'); 87 $form->display('created_at');
94 $form->display('updated_at'); 88 $form->display('updated_at');
......
...@@ -70,7 +70,7 @@ class DevFFmpeg extends Command ...@@ -70,7 +70,7 @@ class DevFFmpeg extends Command
70 // $arr = json_decode($json,true); 70 // $arr = json_decode($json,true);
71 // dd($arr); 71 // dd($arr);
72 // dd(AdminMakeVideo::query()->find(1)->poem2()); 72 // dd(AdminMakeVideo::query()->find(1)->poem2());
73 -// dd(AdminMakeVideo::query()->find(1)->poem2->verses->toArray()); 73 + dd(AdminMakeVideo::query()->find(33)->poem2->verses->toArray());
74 // return 0; 74 // return 0;
75 // dd(AdminMakeVideo::query()->find(33)->temp->components->toArray()); 75 // dd(AdminMakeVideo::query()->find(33)->temp->components->toArray());
76 dd(AdminMakeVideo::query()->find(33)->temp->toArray()); 76 dd(AdminMakeVideo::query()->find(33)->temp->toArray());
......
...@@ -219,12 +219,12 @@ class AdminMakeImmerse implements ShouldQueue ...@@ -219,12 +219,12 @@ class AdminMakeImmerse implements ShouldQueue
219 switch ($component->name){ 219 switch ($component->name){
220 case 'one_poem': 220 case 'one_poem':
221 foreach ($this->adminMakeVideo->poem2->verses as $item) { 221 foreach ($this->adminMakeVideo->poem2->verses as $item) {
222 - if ($item->stanza != '') $contents[] = $item->stanza; 222 + if ($item->content != '') $contents[] = $item->content;
223 } 223 }
224 break; 224 break;
225 case 'one_poem_with_annotate': 225 case 'one_poem_with_annotate':
226 foreach ($this->adminMakeVideo->poem2->verses as $item) { 226 foreach ($this->adminMakeVideo->poem2->verses as $item) {
227 - if ($item->stanza != '') $contents[] = $item->stanza; 227 + if ($item->content != '') $contents[] = $item->content;
228 if ($item->annotate != '') $contents[] = $item->annotate; 228 if ($item->annotate != '') $contents[] = $item->annotate;
229 } 229 }
230 break; 230 break;
...@@ -269,7 +269,7 @@ class AdminMakeImmerse implements ShouldQueue ...@@ -269,7 +269,7 @@ class AdminMakeImmerse implements ShouldQueue
269 case 'one_poem': 269 case 'one_poem':
270 $stanzas = ''; 270 $stanzas = '';
271 foreach ($this->adminMakeVideo->poem2->verses as $item) { 271 foreach ($this->adminMakeVideo->poem2->verses as $item) {
272 - if ($item->stanza != '') $stanzas = $item->stanza . "\n"; 272 + if ($item->content != '') $stanzas .= $item->content . "\n";
273 } 273 }
274 $contents[] = $stanzas; 274 $contents[] = $stanzas;
275 break; 275 break;
......
...@@ -506,12 +506,12 @@ class UserMakeImmerse implements ShouldQueue ...@@ -506,12 +506,12 @@ class UserMakeImmerse implements ShouldQueue
506 switch ($component->name){ 506 switch ($component->name){
507 case 'one_poem': 507 case 'one_poem':
508 foreach ($this->immerse->poem2->verses as $item) { 508 foreach ($this->immerse->poem2->verses as $item) {
509 - if ($item->stanza != '') $contents[] = $item->stanza; 509 + if ($item->content != '') $contents[] = $item->content;
510 } 510 }
511 break; 511 break;
512 case 'one_poem_with_annotate': 512 case 'one_poem_with_annotate':
513 foreach ($this->immerse->poem2->verses as $item) { 513 foreach ($this->immerse->poem2->verses as $item) {
514 - if ($item->stanza != '') $contents[] = $item->stanza; 514 + if ($item->content != '') $contents[] = $item->content;
515 if ($item->annotate != '') $contents[] = $item->annotate; 515 if ($item->annotate != '') $contents[] = $item->annotate;
516 } 516 }
517 break; 517 break;
...@@ -556,7 +556,7 @@ class UserMakeImmerse implements ShouldQueue ...@@ -556,7 +556,7 @@ class UserMakeImmerse implements ShouldQueue
556 case 'one_poem': 556 case 'one_poem':
557 $stanzas = ''; 557 $stanzas = '';
558 foreach ($this->immerse->poem2->verses as $item) { 558 foreach ($this->immerse->poem2->verses as $item) {
559 - if ($item->stanza != '') $stanzas = $item->stanza . "\n"; 559 + if ($item->content != '') $stanzas .= $item->content . "\n";
560 } 560 }
561 $contents[] = $stanzas; 561 $contents[] = $stanzas;
562 break; 562 break;
......
...@@ -20,6 +20,6 @@ class OnePoem2 extends Model ...@@ -20,6 +20,6 @@ class OnePoem2 extends Model
20 20
21 public function verses() 21 public function verses()
22 { 22 {
23 - return $this->belongsToMany(Verse::class, 'verse_poem2', 'poem_id', 'verse_id'); 23 + return $this->hasMany(OneSentence::class,'poem_id');
24 } 24 }
25 } 25 }
......
1 +<?php
2 +
3 +namespace App\Models;
4 +
5 +use Illuminate\Database\Eloquent\Factories\HasFactory;
6 +use Illuminate\Database\Eloquent\Model;
7 +
8 +class OneSentence extends Model
9 +{
10 + use HasFactory;
11 +
12 + protected $fillable = ['content', 'annotate', 'spelling', 'en'];
13 +
14 + public function poem2()
15 + {
16 + return $this->belongsTo(OnePoem2::class,'poem_id');
17 + }
18 +}
...@@ -11,10 +11,15 @@ class PackPoem extends Model ...@@ -11,10 +11,15 @@ class PackPoem extends Model
11 use HasDateTimeFormatter; 11 use HasDateTimeFormatter;
12 protected $table = 'pack_poem'; 12 protected $table = 'pack_poem';
13 13
14 - protected $with = ['poem']; 14 +// protected $with = ['poem'];
15 15
16 public function poem() 16 public function poem()
17 { 17 {
18 return $this->belongsTo(OnePoem::class); 18 return $this->belongsTo(OnePoem::class);
19 } 19 }
20 +
21 + public function poem2()
22 + {
23 + return $this->belongsTo(OnePoem2::class);
24 + }
20 } 25 }
......
1 +<?php
2 +
3 +use Illuminate\Database\Migrations\Migration;
4 +use Illuminate\Database\Schema\Blueprint;
5 +use Illuminate\Support\Facades\Schema;
6 +
7 +class CreateOneSentencesTable extends Migration
8 +{
9 + /**
10 + * Run the migrations.
11 + *
12 + * @return void
13 + */
14 + public function up()
15 + {
16 + Schema::dropIfExists('verse_poem2');
17 +
18 + Schema::create('one_sentences', function (Blueprint $table) {
19 + $table->id();
20 + $table->unsignedTinyInteger('poem_id');
21 + $table->string('content')->default('')->comment('正文');
22 + $table->text('annotate')->nullable()->comment('注解');
23 + $table->text('spelling')->nullable()->comment('拼音');
24 + $table->text('en')->nullable()->comment('英文解释');
25 + $table->timestamps();
26 + });
27 + }
28 +
29 + /**
30 + * Reverse the migrations.
31 + *
32 + * @return void
33 + */
34 + public function down()
35 + {
36 + Schema::dropIfExists('one_sentences');
37 + }
38 +}