当前位置: 首页 > 知识库问答 >
问题:

将透视表附加到laravel中的其他两个表

闽涵蓄
2023-03-14

我有2张桌子。一个有用户,一个有位置。我创建了一个名为user_locations的数据透视表。一个用户可以有一个或多个位置。一个位置可以属于一个或多个用户。所以我在这些桌子上有多对多的关系。我已经从laravel上读到过附加方法,但我不太确定如何使用它。

在“我的用户和位置”表中,我有一个id,该id在“用户id”和“位置id”下进入我的透视表。

$user = new User;
$user->organisation_id = Auth::user()->organisation_id;
$user->fill(Input::except('locations'));

$input_locations = Input::only('locations');

foreach($input_locations as $input_location){
$location_id = Location::where('name', '=', $input_location)->get();
$location = Location::find($location_id);

$user->User_location()->associate($location);

目前我遇到了两个问题。In Location::where('name…)我应该检查$input\u locations中的id,但我不知道如何获取id?有一个id和一个名称来自input::only('locations')。

我的第二个问题是最后一行代码。这里我应该使用附件。我在laravel文档中发现了这一点:

您还可以传递应该存储在数据透视表中的关系属性数组

 $user->roles()->attach(1, array('expires' => $expires));

所以我认为它应该是这样的:

 $user->user_locations()->attach(the new user id, array('location_id' => $location_id));

真的希望有人能帮我,因为我真的不知道从这里走下去。

更新:

这是我的用户控制器:

 public function createUserPost()
{
    $user = new User;
    $user->organisation_id = Auth::user()->organisation_id;
    $user->fill(Input::except('locations'));

    // pak het field locations
    $input_locations = Input::only('locations');

    if($user->save())
    {
        // Koppel de id's van de locatie aan de nieuwe user
        $new_user_id = $user->id;
        foreach ($input_locations as $key => $value) {
            $location = Location::find($value);
            User::find($new_user_id)->locations()->attach($location);
        }
        return Redirect::to('users/'.$user->id);
    }
    return $this->createUser($user);
}

在我的用户模型中,我有这样的规则:

 'locations' => 'required',

这是必需的,因为它是必填字段。现在,当我点击submit按钮时,它不会保存用户,而是在填充时说“位置”字段是必需的。问题是选择位置的名称不正确。但我不知道如何把它放到我的表中,因为我没有一个名为locations的列。这只是为了填充透视表并确保表单中需要该字段。

共有1个答案

申嘉慕
2023-03-14

你为什么不使用Laravel的关系?

你想要一个多对多的关系。在这种情况下,请将数据透视表重命名为location\u user(默认情况下,数据透视表应按字母顺序排列)。

然后定义您的关系:

// In User.php model
protected $fillable = ['first_name', 'last_name']; \\ List of all allowable items to be filled

public function locations()
{
    return $this->hasMany('Location');
}

// In Location.php model
public function users()
{
    return $this->hasMany('User');
}

之后,有许多方法可以将位置附加到您的用户。最好的方法是:

public function createUserPost()
{
    $user = new User(Input::all); // Use the $fillable in the model to allow mass assign

    // This should be done via a relationship
    $user->organisation_id = Auth::user()->organisation_id;

    // pak het field locations
    $input_locations = Input::only('locations');

    $location_ids = [];
    foreach($input_locations as $key => $id) {
        $location_ids[] = Location::find($value)->id;
    }
    $user->locations()->attach($location_ids);

    if($user->save())
    ...
}
 类似资料:
  • 我正在尝试保存数据透视表中多列的数据。但是,数据没有保存。下面是我正在做的事情: 表 刀片 如果我只使用checkbox来同步benefit_id和user_id,它就能工作。但如果添加额外的数据amount1和amount2,则不起作用。 控制器 事先谢谢你的帮助。

  • 我有3个表:,,。用户和池具有透视表,因为它们具有多对多关系。 权限条目仅由我手动创建。然后,每个池可以根据自己的用户认为合适的情况将权限分配给他们自己的用户。因此,用于将用户链接到权限的透视表需要同时具有和和 那么这个数据透视表是如何工作的呢?如何制作三向透视表? 编辑:我的问题基本上是在这里问的,没有令人满意的答案!

  • 请原谅我的新问题,这个问题主要是因为我顽固地缺乏对拉雷维尔多对多关系的理解。 在我的网站上,用户可以上传图片 伴随着用户自己创建的标签。这些标记存储为一个数组,经过验证,然后检查标记是否存在。如果标签存在,我希望在“tagmap”上有一个条目,将新图像与该标签相关联。如果它不存在,我希望同样的事情发生,但也有一个新的标签被创建。 我有3个表,一个图像表、一个标签表和一个名为“tagmap”的透视表

  • 我的问题是:我想创建一个PNG,它在xy图表上有一个小圆圈的图像。我的圆是一个饼图,所以我可以把它显示为饼图,我想把它放在我想要的图中的任何(x,y)中。我想过XYShapeAnnotation,但是这个圆圈需要分成几个部分,我不想用java图形来做,因为我不知道它,而且我认为我不需要它来满足我的需要。需要注意的是,我不能使用JfreeChart覆盖方法,因为我有两个不同的数据集(XY、Pie)

  • 我试图创建一个关系,通过一个名为年级的模型访问一个名为注释的表,通过年级中的学生加载 年级模型和学生模型都属于其他模型 根据我的理解,不可能访问需要透视表的hasManyThrough关系(注释没有年级标识符,只有学生标识符) 我为Laravel 4@HasManyThrough找到了这些函数,它们具有一对多关系,但它给了我一个错误类“App\illumb\Database\Eloquent\Re

  • 我在我的透视表中有一个额外的用户名列,如何将用户名与角色同步? pivot表 我需要在字段中同步用户名 这是更新功能,我在其中添加了 这是我的中的关系 下面是表迁移 这是我在转储请求并验证用户名时得到的结果 转储代码