首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何存储表之间的关系

如何存储表之间的关系
EN

Stack Overflow用户
提问于 2016-07-18 17:48:54
回答 2查看 45关注 0票数 1

我创建了一个与另外两个表相关的表,但是我不知道如何在创建新项目时将它们联系起来,我怎么能这样做呢?

我将在我的管理中的一个单独的页面中创建类别,当用户创建一个新项目时,他将能够从表中选择一个类别数组。

我的问题是,当POST数据时,我如何存储关系?我以前从没这么做过。

项目模型

代码语言:javascript
运行
复制
class Project extends Model
{
    protected $table = 'projects';

    protected $fillable = [
        'name',
        'slug',
        'header',
        'desc',
        'about',
        'url',
        'status'
    ];

    public function customer()
    {
        return $this->belongsTo(Customer::class);
    }

    public function category()
    {
        return $this->belongsToMany(Category::class);
    }

    public function categories()
    {
        return $this->hasMany(Category::class);
    }
}

范畴模型

代码语言:javascript
运行
复制
class Category extends Model
{
    protected $table = 'categories';

    protected $fillable = [
        'name',
        'status'
    ];

    public function subCategory()
    {
        return $this->hasMany(SubCategory::class);
    }

    public function projects()
    {
        return $this->belongsToMany(Project::class);
    }
}

我真正的职位创造

代码语言:javascript
运行
复制
public function postCreate(ProjectCreateRequest $request, Customer $customer)
{

    //Array
    $categories = $request->categories;

    $customer->projects()->create([
        'name' => $request->name,
        'header' => $request->header,
        'desc' => $request->desc,
        'about' => $request->about,
        'url' => $request->url,
    ]);

    //How do I store the relation?

    return redirect('admin/clientes/editar/' . $customer->id);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-18 18:54:45

对许多关系使用attachsync引用:https://laravel.com/docs/5.1/eloquent-relationships#inserting-related-models

代码语言:javascript
运行
复制
public function postCreate(ProjectCreateRequest $request, Customer $customer)
{
    //Array
    $categories = $request->categories;

    $projects = $customer->projects()->create([
        'name' => $request->name,
        'header' => $request->header,
        'desc' => $request->desc,
        'about' => $request->about,
        'url' => $request->url,
    ]);

    //suppose here the $categories is an array of ids or a single integer variable id of the category that are related
    $projects->categories()->attach($categories);

    return redirect('admin/clientes/editar/' . $customer->id);
}
票数 1
EN

Stack Overflow用户

发布于 2016-07-18 19:23:49

First:确保数据库中有下表,以便使多到多个关系工作

表名: category_project

列: category_id,project_id

第二步:类项目只需要以下与工作相关的类别函数:

代码语言:javascript
运行
复制
public function categories()
{
    return $this->belongsToMany(Category::class);
}

第三类:与工作相关的项目只需要以下功能:

代码语言:javascript
运行
复制
public function projects()
{
    return $this->belongsToMany(Project::class);
}

第四: postCreate函数应该如下所示:

代码语言:javascript
运行
复制
public function postCreate(ProjectCreateRequest $request, Customer $customer)
{

//should be an array of categories ids
$categories = $request->categories;

$project = $customer->projects()->create([
    'name' => $request->name,
    'header' => $request->header,
    'desc' => $request->desc,
    'about' => $request->about,
    'url' => $request->url,

]);

//How do I store the relation? you can use attach or sync
$project->categories()->sync($categories);

return redirect('admin/clientes/editar/' . $customer->id);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38443000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档