Laravel如何用post方法插入数据?

Laravel how to insert data with post method?

几天来,我一直在尝试使用 post 方法从我的 Angular 组件传输数据。经过长时间的研究和阅读许多文档,我仍然无法解决我的问题,希望你能帮助我。

我想做的是使用 post 方法来分配 user_idtrack_id 字段。我想在购买后将用户和他的 ID 添加到相应的曲目 ID,但不幸的是我无法让它工作。你有什么办法可以解决这个问题吗?

我创建了一个名为 create_trackusers 的迁移:

        Schema::create('trackusers', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedBigInteger('user_id');
            $table->unsignedBigInteger('track_id');

            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('track_id')->references('trackId')->on('tracklists')->onDelete('cascade');
        });

这里我创建了一个多对多的关系。 然后我创建了我的控制器:

    public function addTrackusers(Request $request, $id)
    {

        $trackusers = User::find($id);

        $trackusers = trackusers::create([
            'user_id'       => $request->name,
            'track_id'      => $request->email
        ]);

        $trackusers->safe();

        return $trackusers;
    }

我的 api.php 路线是这样的:

// Insert Data to trackusers
Route::post('addTrackusers/{id}', 'App\Http\Controllers\trackusersController@addTrackusers');

这里我想把user_id分配给他购买的track_id

这就是 table 在成功进入后应该如何看待。

以下是模型的更多详细信息: trackusers.php:

    protected $fillable = [
        'user_id',
        'track_id'
    ];

tracklists.php:(曲目所在的位置)

class tracklists extends Model
{
    use HasFactory;
    
}

User.php:

    protected $fillable = [
        'name',
        'email',
        'password',
        'tracks'
    ];

非常感谢!

根据我的理解.. 您可以使用 pivot 轻松地将用户映射到曲目列表。我们可以在这里使用一些很好的关系函数,它们是 attach() 和 detach()。因此,例如,如果我要将新用户添加到曲目列表,您需要创建的关系在我们的曲目列表和用户模型之间称为多对多。

class tracklists extends Model
 {
    /**
       * The tracklists that belong to many user.
     */
    public function users(){
       return $this->belongsToMany('App\User');
    }
  }

对于我们的用户模型:

class User extends Model
 {
    /**
     * The uses that belong to many tracklists.
   */
    public function tracklists()
    {
       return $this->belongsToMany('App\tracklists');
    }
  }

附加和分离, 那么我们如何实际存储我们的 trackusers table 的记录?

public function addTrackusers(Request $request, $id)
{

    $user = User::find($id);

    $user->tracklists()->attach($request->track_id); // add track
    return $user->tracklists();
}

添加多条轨道

    public function addTrackusers(Request $request, $id)
{

    $user = User::find($id);
    $user->tracklists()->attach([1,3,7]); // add multiple tracks via an 
 array of track IDs
    return $user->tracklists();
}

如果你想从一个 pivot table 中删除一个或多个曲目列表,你可以使用 detatch 方法:

public function removeTrackusers(Request $request, $id)
{

    $user = User::find($id);
    $user->tracklists()->attach($request->track_id); // remove track
    $user->tracklists()->detach([1,3,7]); // remove multiple tracks via an 
 array of track IDs
    return $user->tracklists();
}

结论 就是这样了。现在您知道如何将 pivot tables 与 Laravel 和 Eloquent 一起使用,这是一个方便的工具。

谢谢,希望这对你有帮助