查看收藏的用户列表

时间:2019-07-26 11:37:59

标签: php laravel laravel-5

我是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)

该怎么做?如何修复我的代码以收到这样的结果?

1 个答案:

答案 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');
}