Учитывая связи, которые вы установили, чтобы получить только активные подписки из класса модели, вам нужно будет сделать это следующим образом:
class Subscription extends Model
{
public static function allActive()
{
$activeSubcriptions = Subscription::whereHas('user', function($query){
$query->where('active', 1) //or you could use true in place of 1
})->get();
return $activeSubcriptions;
}
public function user()
{
return $this->belongsTo(User::class);
}
}
То, что работа с closures
в Laravel, довольно эффективноспособ написания расширенных красноречивых запросов.
В функции обратного вызова вы будете делать практически все с объектом $ query
, который в основном работает с моделью User, поскольку вы упомянули его как первый параметр * 1008.*
Обратите внимание, что эта переменная должна иметь ИМЕННО то же имя, которое использовалось при объявлении отношения
Выше я полагаю, что ответ на ваш первый вопрос, однако настоятельно рекомендуется, чтобы вывыполните большую часть этой логики в файле контроллера
Чтобы ответить на вопрос 2, когда вы выполните этот get()
, он вернет массив Subscription
объектов, поэтому для доступа к информации, основанной на столбцах, вы должны будете выглядеть так:
$subscriptions = \App\Subscription::allActive();
foreach($subscriptions as $subscription){
$amount = $subscription->amount; //this you access directly since we working with the subscription object
$box_id = $subscription->box_id;
//when accessing user columns
$email = $subscription->user->email; //you will have to access it via the relationship you created
$address = $subscription->user->address;
}