Laravel:如何给用户分配组织



我想为一个用户分配一个组织,但在我的代码中发生的是,当我创建一个新的组织,它的ID为1,它自动将自己分配给用户ID为1。

这是我的AssignOrgToUser控制器

<?php
namespace AppHttpControllersApi;
use AppHttpControllersController;
use AppModelsorganizations;
use AppModelsUser;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class AssignOrgToUserController extends Controller
{
public function assignOrg(Request $request, $id)
{
$users = User::find($id);
if(is_null($users)){
return response()->json(["message"=>"User not found!"], 404);
}
$rules=[  
'organization'=>'required',
];

$validator = Validator::make($request->all(), $rules);
if($validator->fails()){
return response()->json($validator->errors(),400);
}
$data = $request->validate([
'organization'=>'required',
]);
$orgs = organizations::where('id', '=', $request->organization)->first();
if(is_null($orgs)){
return response()->json(["message"=>"Organization not found!"], 404);
}

$orgs= $users->save();
if($orgs){
return ["result"=>"ORG Added"];
}else{
return ["result"=>"ORG not Added"];
}

// $users->save([$orgs]);
// return response(['message'=>"Organization has beed added", $users]);
}
}

组织模式:

<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class organizations extends Model
{
public $table = "organizations";
use HasFactory;
protected $guarded = [];
public function users(){
return $this->belongsTo('AppModelsUser'); #if column not found indicate the column name
}
}
任何形式的帮助/建议将非常感激。谢谢你! !

将此$orgs= $users->save();替换为以下代码

为更新使用associate方法,这样做(在您的情况下)

$orgs = Organisation::create(['someColumn' => $request->someColumn]);
$orgs->users()->associate($users);
$orgs->save();

查看更多https://laravel.com/docs/8.x/eloquent-relationships#inserting-and-updating-related-models

看起来问题来自于你的请求URL,你已经定义了你的控制器来接收一个参数名称id,我可以假设你已经定义了这样的路由

Route::post("/assign_organization/{id}", [AssignOrgToUserController::class, "assignOrg"]);

如果请求url包含一个用户ID,这是1任何时候你将尝试创建一个组织,它将附加到一个用户ID为1。当您根据从URL

获得的id检索用户时
$user = User::find($id);

如果你想给一个组织分配一个不同的用户ID,你应该在你的请求体中传递这个用户ID。它不会考虑URL Body

$user = User::find($request->get("user_id"));

最新更新