Laravel-admin 增加关联表疑问?

需求: 博客表一个 blogs,标签表一个 tags,博客标签关联表一个 blog_tag, 多对多的关系,我用到了关联表

blog:字段

  1. id title content ...

tags:字段

  1. id , name ...

blog_tag字段

  1. id, blog_id, tag_id

    普通思路: 1.增加博客,2.增加tag 3.处理关联表

    请问:用laravel-admin 这个组件中,添加博客时候,具体怎么处理

    $form->saved(function (Form $form) {
    //这里处理吗? 
    });
陈帅同学
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
刘天承
最佳答案

第一步,需要定义关联关系

class Blog extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }
}

class Tags extends Model
{
    public function blogs()
    {
        return $this->belongsToMany(Blog::class);
    }
}

第二步,需要在grid里边关联起来

return Admin::grid(Blog::class, function (Grid $grid) {
    $grid->id('ID')->sortable();
    $grid->title();
    $grid->content();

    $grid-> tags()->display(function ($tags) {

        $res = array_map(function ($tag) {
            return "<span class='label label-success'>{$tag['name']}</span>";
        }, $tags);

        return join(' ', $res);
    });

});

其他地方不需要处理,应该是自动保存

如果对您有帮助,请采纳,谢谢!

5年前 评论
讨论数量: 5
刘天承

第一步,需要定义关联关系

class Blog extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }
}

class Tags extends Model
{
    public function blogs()
    {
        return $this->belongsToMany(Blog::class);
    }
}

第二步,需要在grid里边关联起来

return Admin::grid(Blog::class, function (Grid $grid) {
    $grid->id('ID')->sortable();
    $grid->title();
    $grid->content();

    $grid-> tags()->display(function ($tags) {

        $res = array_map(function ($tag) {
            return "<span class='label label-success'>{$tag['name']}</span>";
        }, $tags);

        return join(' ', $res);
    });

});

其他地方不需要处理,应该是自动保存

如果对您有帮助,请采纳,谢谢!

5年前 评论

laravel-admin 里面有专门处理 多对多关系的部分

5年前 评论
刘天承

第一步,需要定义关联关系

class Blog extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }
}

class Tags extends Model
{
    public function blogs()
    {
        return $this->belongsToMany(Blog::class);
    }
}

第二步,需要在grid里边关联起来

return Admin::grid(Blog::class, function (Grid $grid) {
    $grid->id('ID')->sortable();
    $grid->title();
    $grid->content();

    $grid-> tags()->display(function ($tags) {

        $res = array_map(function ($tag) {
            return "<span class='label label-success'>{$tag['name']}</span>";
        }, $tags);

        return join(' ', $res);
    });

});

其他地方不需要处理,应该是自动保存

如果对您有帮助,请采纳,谢谢!

5年前 评论
chenshuai

@刘天承 @Ken 谢谢老哥 :blush:

关系定义好之后,加上这个代码,就可以实现自动中间表自动保存

看文档不仔细,是我马虎了

use App\Models\Tag;
.
.
.
$form->multipleSelect('tags')->options(Tag::all()->pluck('name', 'id'));
5年前 评论

问一下复选框表单提交为什么只生成了一条数据

5年前 评论

想请教一下如果多对多关系中间表有附加栏位要如何处理呢?比如关系是 $this->belongsToMany(Blog::class)->withPivot('permission') , 这样就不能直接用 multipleSelect 了
感谢

4年前 评论
wanwb001 4年前
aaaS 3年前
aaaS 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!