laravel属于有条件的

Dar*_*ama 4 php postgresql laravel-4

我有以下型号.

class Training extends \Eloquent {

    // Add your validation rules here
    public static $rules = [
        'name' => 'required',
        'city' => 'required',
        'province' => 'required',
        'budget_year' => 'required|integer',
        's_date' => 'required|date',
        'e_date' => 'required|date'
    ];

    // Don't forget to fill this array
    protected $fillable = [
        'name',
        'city',
        'province',
        'budget_year',
        's_date',
        'e_date'
    ];

    public function material(){
        return $this->hasMany('Material');
    }

    public function budget(){
        return $this->belongsToMany('Budget')->withPivot('amount');
    }

    public function budgetById($training_id){
        $this->belongsToMany('Budget')->where('training_id', '=', $training_id)->get();
    }

}
Run Code Online (Sandbox Code Playgroud)

当我使用调试budgetById方法时DB::getQueryLog,查询如下

select budgets.*, 
budget_training.training_id as pivot_training_id, 
budget_training.budget_id as pivot_budget_id 
from budgets inner join budget_training on budgets.id = budget_training.budget_id 
where budget_training.training_id is null and training_id='6'
Run Code Online (Sandbox Code Playgroud)

返回0行,但是当我尝试修改查询并在pgadmin中运行它时,以下脚本运行良好.

select budgets.*, 
budget_training.training_id as pivot_training_id, 
budget_training.budget_id as pivot_budget_id 
from budgets inner join budget_training on budgets.id = budget_training.budget_id 
where budget_training.training_id='6'
Run Code Online (Sandbox Code Playgroud)

请注意我training_id is null and从laravel生成的查询中删除.我的budgetById方法有什么问题?

The*_*pha 12

你已经打过电话get()并且没有return在这里使用:

public function budgetById($training_id){
    // = in where is optional in this case
    $this->belongsToMany('Budget')->where('training_id', '=', $training_id);
}
Run Code Online (Sandbox Code Playgroud)

你应该这样使用:

public function budgetById($training_id){
    // = in where is optional in this case
    return $this->belongsToMany('Budget')->where('training_id', '=', $training_id);
}
Run Code Online (Sandbox Code Playgroud)

  • 你不需要`=`,好像只有2个参数在`where()`,`=`是隐含的 (8认同)

Geo*_*rge 5

在 Lavarel 7.X 中,您可以使用该wherePivot方法来过滤数据透视表上的列,如下所示:

return $this->belongsToMany('Budget')->wherePivot('training_id', '=', $training_id);
Run Code Online (Sandbox Code Playgroud)

或者

return $this->belongsToMany('Budget')->wherePivotNotNull('training_id');
Run Code Online (Sandbox Code Playgroud)