我有三个表:用户、产品和购买
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 |
+------------+------+-----------------------+
然后我可以遍历product_ids,所有为空的都表示未购买。
但感觉不是最理想的。有人对此有更好的方法吗?