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) {
    //这里处理吗? 
    });
陈帅同学
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
刘天承
最佳答案

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

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);
    });

});

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

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

6年前 评论
讨论数量: 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);
    });

});

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

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

6年前 评论

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

6年前 评论
刘天承

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

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);
    });

});

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

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

6年前 评论
chenshuai

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

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

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

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

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

6年前 评论

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

5年前 评论
wanwb001 5年前
aaaS 4年前
aaaS 4年前

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