Laravel 5 拉威尔问题与相关模型

Laravel 5 拉威尔问题与相关模型,laravel-5,laravel-eloquent,Laravel 5,Laravel Eloquent,我有三个表:用户、产品和购买 User: id, email Product: id, name Purchase: user_id, product_id, transaction_id 在Laravel中,我定义了以下模型: class User extends Authenticatable { //only protected $$fillable and $hidden fields } class Product extends Model { //only p

我有三个表:用户、产品和购买

User: id, email
Product: id, name
Purchase: user_id, product_id, transaction_id
在Laravel中,我定义了以下模型:

class User extends Authenticatable { 
    //only protected $$fillable and $hidden fields
}

class Product extends Model {
    //only protected $$fillable and $hidden fields
}

class Purchase extends Model {
    public function user() {
        return $this->hasOne('App\Models\Access\User\User');
    }

    public function product() {
        return $this->hasOne('App\Models\Modules\Product');
    }
}
我的想法是,我可以找出哪个用户已经购买了哪些产品,这样(在我看来)我就可以遍历所有的产品,并指出哪些产品已经被该用户购买了。对于这些,我将展示“观看此产品”,对于所有其他(尚未购买的产品),我将展示“购买此产品”

我目前正在使用以下SQL语句

mysql> select p1.product_id, u1.id, p1.stripe_transaction_id  from users u1 right join purchases p1 on u1.id = p1.user_id and u1.id = 4 right join products p2 on p1.product_id = p2.id;

+------------+------+-----------------------+
| product_id | id   | stripe_transaction_id |
+------------+------+-----------------------+
|        100 | NULL | _jbshvScW_8961        |
|        100 | NULL | _zrtdXU_6811          |
|        101 | NULL | _zvgvKS_2536          |
|        102 |    4 | _asgvMP_6811          |
|        103 |    4 | _bffgMXX_6811         |
+------------+------+-----------------------+
然后我可以在产品ID上循环,所有为空的表示未购买


但感觉并不是最理想的。有人有更好的方法吗?

在您的逻辑的哪一个特定方面有问题?返回所有产品所需的SQL语句,并注明是否购买了这些产品。