Php 雄辩-使用关系的结束语

Php 雄辩-使用关系的结束语,php,laravel,eloquent,Php,Laravel,Eloquent,我有这个问题,拉雷维尔雄辩。 我有两个模型-为了简单起见,命名为: A(身份证、姓名) B(id,a_id,创建时) 关系:A有很多B 我需要返回按以下条件筛选的所有B记录: $allB = B::whereHas('a', function (Builder $query) { $query->where('A.name', $givenName); })->where('created_at','>=',$givenDate)-

我有这个问题,拉雷维尔雄辩。 我有两个模型-为了简单起见,命名为:

  • A(身份证、姓名)
  • B(id,a_id,创建时)
  • 关系:A有很多B
我需要返回按以下条件筛选的所有B记录:

$allB = B::whereHas('a', function (Builder $query) {
            $query->where('A.name',  $givenName);
        })->where('created_at','>=',$givenDate)->get();
  • A.name=给定的名称
  • B.在>=给定日期创建
我想通过传递一个闭包来实现这一点。 我搜索了有关模型的laravel文档:

找到了这些例子,但我该如何把它们放在一起呢

public function user()
{
    return $this->belongsTo('App\User')->withDefault(function ($user, $post) {
        $user->name = 'Guest Author';
    });
}

function (Builder $builder) {
    $builder->where('age', '>', 200);
}

您可以使用whereHas执行此操作,但是首先需要在模型中定义关系,如下所示:

模型

class A extends Model
{
    /**
     * Get all B for the A.
     */
    public function b()
    {
    return $this->hasMany(B::class);
    }
}
B型

class B extends Model
{
    /**
     * Get the B's A.
     */
    public function a()
    {
    return $this->belongsTo(A::class);
    }
}
现在,在定义关系之后,只需使用带有闭包的
whereHas
来检查额外条件:

$allB = B::whereHas('a', function (Builder $query) {
            $query->where('A.name',  $givenName);
        })->where('created_at','>=',$givenDate)->get();

您可以使用whereHas执行此操作,但是首先需要在模型中定义关系,如下所示:

模型

class A extends Model
{
    /**
     * Get all B for the A.
     */
    public function b()
    {
    return $this->hasMany(B::class);
    }
}
B型

class B extends Model
{
    /**
     * Get the B's A.
     */
    public function a()
    {
    return $this->belongsTo(A::class);
    }
}
现在,在定义关系之后,只需使用带有闭包的
whereHas
来检查额外条件:

$allB = B::whereHas('a', function (Builder $query) {
            $query->where('A.name',  $givenName);
        })->where('created_at','>=',$givenDate)->get();

你需要把这个写在模型上

class A extends Model
{
    public function aToB()
    {
      return $this->hasMany('App\B', 'a_id', 'id');
    }
 }
然后您需要编写查询

$userData = A::where('name',  $givenName)->with('aToB');
$userData = $userData->whereHas('aToB', function($query) use($givenDate){
   $query->whereDate('created_at', date('Y-m-d', strtotime($givenDate)));
});
$userData = $userData->get();
dd($userData->aToB);

你需要把这个写在模型上

class A extends Model
{
    public function aToB()
    {
      return $this->hasMany('App\B', 'a_id', 'id');
    }
 }
然后您需要编写查询

$userData = A::where('name',  $givenName)->with('aToB');
$userData = $userData->whereHas('aToB', function($query) use($givenDate){
   $query->whereDate('created_at', date('Y-m-d', strtotime($givenDate)));
});
$userData = $userData->get();
dd($userData->aToB);