Итак, у меня есть 2 модели, User
и Website
.Laravel scope с пользовательским отношением для проверки подписки
Я также использую кассир Laravel, который использует полосу для подписки.
Отношения моя User
модель:
public function websites() {
return $this->hasMany('App\Models\Website');
}
Отношения в моей Website
модели:
public function user() {
return $this->belongsTo('App\User');
}
Также в моей Website
модели:
public function scopeNeedsUpdate($query) {
$query->whereRaw('last_queued <= DATE_SUB(NOW(), INTERVAL 12 HOUR)')->orderBy('created_at', 'desc');
}
Прицел где я получаю сайты которые должны быть поставлены в очередь. Тем не менее, мне нужно добавить условие, что он вернет только веб-сайт last_queued. < = 12 часов. Соответствующая User
имеет активную подписку.
Я действительно не знаю, как лучше подойти, чтобы сделать это с красноречивым. В любом случае я стараюсь, что это слишком грязно.
Это немного больше, чем проверка того, активен ли статус, или '1', как хранит его Laravel. Он также имеет 'subscription_ends_at', который должен быть либо« null », либо дата, которая не прошла. (Льготный период). У Laravel есть метод '$ user-> signed()', который возвращает 'true' или' false', поэтому я надеялся, что смогу использовать это прямо так или иначе? – zen
@zen Я раньше не использовал Кассир, но теперь просматриваю документы и вижу, какие типы таблиц базы данных ему требуются. Не совсем понятно, что вы хотите. Насколько мне известно, вы хотите получить список сайтов с полем «last_queued» с временной отметкой за последние 12 часов и принадлежащими к активным пользователям, которые подписались на * ваш сайт * и чьи подписки активны ('subscription_ends_at' имеет значение null или дата, которая еще не прошла)? –
да это в значительной степени. Я использую Laravel 5.0, и я считаю, что кассир изменился после 5.1. Те условия, которые вы описали, верны. Я просто сказал, что, вероятно, будет проще использовать метод '$ user-> signed()', поскольку он автоматически проверяет вас. – zen