我是Laravel的初学者。我在项目中使用Laravel 5.8。
我有这个模型:
用户
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
use cms\Presenters\UserPresenter;
public static $roles = [];
public $dates = ['last_activity'];
protected $fillable = ['name', 'surname', 'email', 'email_verified_at', 'password', 'counter', 'url_address', 'isCompany', 'isMailing', 'content'];
protected $hidden = [
'password', 'remember_token',
];
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function mainRole()
{
return $this->hasOne('App\Role');
}
public function favourites()
{
return $this->hasMany('App\Likeable');
}
}
喜欢
class Likeable extends Model
{
protected $quarded = [];
protected $fillable = ['likeable_id', 'user_id'];
public $timestamps = false;
}
我的迁移:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name', 120)->nullable();
$table->string('surname', 120)->nullable();
$table->string('email', 120)->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');]
$table->char('isMailing', 1)->default(0);
$table->text('content')->nullable();
.....
$table->rememberToken();
$table->timestamps();
$table->engine = "InnoDB";
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
});
}
Schema::create('likeables', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('likeable_id');
$table->bigInteger('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->engine = "InnoDB";
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
});
显示被添加到用户收藏夹列表中的用户列表时出现问题。
当我这样做时:
dd($request->user()->favourites);
我得到这个结果:
Collection {#1031 ▼
#items: array:1 [▼
0 => Likeable {#1032 ▶}
]
}
我需要获得一个用户(likeables。Likeable_id = users.id)
该怎么做?如何修复我的代码以收到这样的结果?
答案 0 :(得分:1)
如果要访问收藏夹作为参数,则需要在用户模型内的appends数组中添加收藏夹 https://laravel.com/docs/5.8/eloquent-serialization#appending-values-to-json
private $appends = ['favourites'];
还需要创建一个变体(https://laravel.com/docs/5.8/eloquent-mutators#accessors-and-mutators),以自动填充此变量:
function getFavouritesAttribute(){
return $this->favourites()->get();
}
之后,您可以致电:
$request->user()->favourites
您会获得完整的用户收藏夹列表
也请尝试更改
public function favourites()
{
return $this->hasMany('App\Likeable');
}
收件人:
public function favourites(){
return $this->hasMany('App\Likeable', 'likeable_id', 'id');
}