Laravel Eloquent:获取相关表列的数据并使用条件

时间:2019-09-02 05:39:48

标签: laravel eloquent relation

我使用LaravelEloquent,并且希望通过关系从两个表中获取数据。

例如,我要选择类别status处于活动状态的所有书籍。

class Book extends Model
{
    public $belongsTo  = [
        'category' => '..\Models\Categories',
    ];

    public function categories() {
        return $this->belongsTo('..\Models\Categories');
    }

}

在控制器中,我可以使用下一个代码选择所有书籍。

Book::with('categories');

是否可以选择类别status处于活动状态的所有书籍?

3 个答案:

答案 0 :(得分:0)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    /**
     * The categories that associated with the book.
     */
    public function categories()
    {
        return $this->belongsToMany('App\Category');
    }
}

在类别模型中,您可以定义范围

喜欢 公共功能scopeStatus($ query,$ status ='active'){     $ query-> where('staatus',$ status); }

,您可以将其检索为$book->categories,反之则是$category->books和带有书籍Category::with('books')->status('active')->get()的类别。

注意:在这种情况下,您需要数据透视表

答案 1 :(得分:0)

您可以为此使用紧急加载。

Book::with(['categories' => function($query){
    $query->where('status','active');
}]);

答案 2 :(得分:0)

模型应为

const navigator = createStackNavigator(
  {
    Event:  Event,
    Signup: Signup,
    Verif1: Verif1,
    Chat: {
      screen: ChatWithSocket,

    } 
  },  {
    initialRouteParams: 'Signup',
  }  
);

const AppContainer = createAppContainer(navigator);
export default AppContainer;  

查询中

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{

    public function categories()
    {
        return $this->belongsTo(Category::class);
    }
}