关联关系

一对一关系

users表和上面的posts表为一对一关联关系,通过posts.author_id字段关联,users表结构如下:

  1. CREATE TABLE `users` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  4. `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  5. `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  6. `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

模型定义为:

  1. class User extends Model
  2. {
  3. }
  4. class Post extends Model
  5. {
  6. public function author()
  7. {
  8. return $this->belongsTo(User::class, 'author_id');
  9. }
  10. }

那么可以用下面的方式显示post所属的用户的详细:

  1. $show->author('作者信息', function ($author) {
  2. $author->setResource('/admin/users');
  3. $author->id();
  4. $author->name();
  5. $author->email();
  6. });

其中$author对象也是Show实例,同样可以使用上面的各种方法

注意:为了能够正常使用这个面板右上角的工具,必须用setResource()方法设置用户资源的url访问路径

一对多或多对多关系

一对多或多对多关系的关联数据会以Model-grid的方式呈现,下面是简单的例子

posts表和评论表comments为一对多关系(一条post有多条comments),通过comments.post_id字段关联

  1. CREATE TABLE `comments` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `post_id` int(10) unsigned NOT NULL,
  4. `content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  5. `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  6. `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

模型定义为:

  1. class Post extends Model
  2. {
  3. public function comments()
  4. {
  5. return $this->hasMany(Comment::class);
  6. }
  7. }
  8. class Comment extends Model
  9. {
  10. }

那么评论的显示通过下面的代码实现:

  1. $show->comments('评论', function ($comments) {
  2. $comments->resource('/admin/comments');
  3. $comments->id();
  4. $comments->content()->limit(10);
  5. $comments->created_at();
  6. $comments->updated_at();
  7. $comments->filter(function ($filter) {
  8. $filter->like('content');
  9. });
  10. });

$comments是一个Encore\Admin\Grid实例,详细的使用方法可以参考model-grid

注意:为了能够正常使用这个数据表格的功能,必须用resource()方法设置comments资源的url访问路径