【发布时间】:2022-01-27 07:13:16
【问题描述】:
在我们的 Web 应用程序中,我们希望有一个简单的包库 cms,因为我们有 users、packages、features 和 user_package 数据库表
- 每个
users可以有一个我们创建的packageuser_package为此 - 每个
user_package属于许多users - 每个
user_package都有packages - 每个
packages可以有很多我们创建的featuresfeatures表 - 每个
features属于许多packages
当我尝试让用户打包它时,我认为它应该是:
user->user_package->package->[feature]
我的模型:
class User extends Authenticatable
{
//...
public function user_package()
{
return $this->hasOne(UserPackage::class);
}
}
class UserPackage extends Model
{
public function package()
{
return $this->belongsTo(Package::class);
}
}
class Package extends Model
{
public function feature(): HasMany
{
return $this->hasMany(Features::class);
}
}
class Features extends Model
{
public function package(): BelongsToMany
{
return $this->belongsToMany(Package::class);
}
}
迁移:
Schema::create('packages', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description')->nullable()->default('');
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
});
Schema::create('features', function (Blueprint $table) {
$table->id();
$table->foreignId('packages_id')->nullable()
->constrained()->cascadeOnUpdate()
->cascadeOnDelete();
$table->string('title');
$table->text('description')->nullable()->default('');
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
});
Schema::create('user_packages', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignId('packages_id')->nullable()->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->longText('features')->nullable()->default('');
$table->integer('price');
$table->dateTime('start_date');
$table->dateTime('end_date');
$table->timestamp('created_at')->useCurrent();
$table->timestamp('update_at')->useCurrent();
});
现在当我尝试获取数据时,我在package 关系中得到null
Route::get('/test',function(){
dd(auth()->user()->with(['user_package'=>function($query){
$query->with(['package'=>function($package){
$package->with('feature')->get();
}])->first();
}])->first());
});
输出:
App\Models\User {#1319 ▼
#hidden: array:2 [▶]
#casts: array:1 [▶]
#connection: "mysql"
#table: "users"
...
#relations: array:1 [▼
"user_package" => App\Models\UserPackage {#1570 ▼
#connection: "mysql"
#table: "user_packages"
...
#dispatchesEvents: []
#observables: []
#relations: array:1 [▼
"package" => null
]
...
}
【问题讨论】: