【发布时间】:2019-12-30 20:29:27
【问题描述】:
在 laravel 中,我有 3 张桌子
用户 // 用于身份验证并在登录后创建另一个用户 费用 店铺我的目的-我希望用户可以注册,并且可以在他们登录时创建另一个用户并且可以根据需要将assign 用户添加到另一个Shop..
只有User in the Same Shop 可以看到他们的Expense..
//我的User表
<pre>
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('shop_id')->nullable();
$table->unsignedBigInteger('user_id')->nullable();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
</pre>
//我的Expense表
<pre>
Schema::create('expenses', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->date('date');
$table->string('description');
$table->double('amount');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
});
</pre>
//我的Shop表
<pre>
Schema::create('shops', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('expense_id')->nullable();
$table->unsignedBigInteger('user_id');
$table->string('name');
$table->string('description');
$table->timestamps();
$table->foreign('expense_id')->references('id')->on('expenses');
$table->foreign('user_id')->references('id')->on('users');
});
</pre>
// 我的用户模型
<pre>
public function expense()
{
return $this->hasMany(\App\Expense::class);
}
public function shop()
{
return $this->hasMany(\App\Shop::class, 'user_id');
}
</pre>
// 我的费用模型
<pre>
class Expense extends Model
{
protected $fillable = ['date', 'description', 'amount', 'user_id', 'shop_id'];
public function user()
{
return $this->belongsTo(\App\User::class);
}
}
</pre>
// 我的店铺模型
<pre>
class Shop extends Model
{
protected $fillable = ['name', 'description', 'expense_id', 'shop_id'];
public function user()
{
return $this->belongsTo(\App\User::class, 'user_id');
}
}
</pre>
// 费用控制人
<pre>
public function index(Request $request)
{
$expense = Expense::with(['user'])->get();
return ExpenseResource::collection($expense);
// dd(auth()->user());
}
public function create(Request $request)
{
$request->validate([
'date' => 'required',
'description' => 'required',
'amount' => 'required',
]);
$expense = new Expense();
$expense->user_id = auth()->user()->id;
$expense->date = $request->date;
$expense->description = $request->description;
$expense->amount = $request->amount;
$expense->save();
return new ExpenseResource($expense);
}
</pre>
//在我的用户控制器中
<pre>
public function index()
{
$users = User::all();
$shops = Shop::all();
return view('user', compact('users', 'shops'));
// return UserResource::collection($users);
}
public function create(Request $request)
{
$request->validate([
'name' => 'required',
'email' => 'required',
'password' => 'required',
]);
$user = new user();
$user->user_id = auth()->user()->id;
$user->name = $request->name;
$user->email = $request->email;
$user->password = bcrypt($request->password);
$user->save();
return new UserResource($user);
}
</pre>
有意义吗?
任何想法,谢谢..
【问题讨论】:
-
这太宽泛了。创建用户需要一个表单、模型、路由和控制器,分配给
Store需要模型/sql之间的链接/关系,查看特定的相关记录还需要路由和自定义约束逻辑等等。你试过了吗?您遇到了什么特定错误?请先展示您的尝试; Stackoverflow 不是代码编写服务。这绝对是可行的,但您需要先尝试一下。 -
我试过不能限制用户只能看到他们的商店。@TimLewis
-
如果您尝试过某事,请展示您尝试过的内容;当我们知道具体问题及其原因时,帮助肯定会更容易。
-
你需要看什么?模型或控制器@TimLewis
-
好多了!因此,目前,您只需返回所有
Expense记录,而不管关联的User及其链接的Shop。因此,您需要做的是检查当前用户,并将返回的Expense记录限制为仅在其User与Shop相同时才包含在内。我会写一个简单的例子。
标签: php laravel eloquent foreign-keys