【发布时间】:2017-01-16 14:05:37
【问题描述】:
我有 4 张桌子。
客户 工作 回合 工作轮次
我创建了以下关系:
Clients > Jobs
Jobs > Rounds
这是我的模型
客户
class Client extends Model
{
protected $dates = [
'created_at',
'updated_at',
'last_done'
];
public function Jobs()
{
return $this->hasMany('App\Job','client_id');
}
}
工作
class Job extends Model
{
protected $dates = [
'created_at',
'updated_at',
'last_done',
'due_date'
];
public function Round()
{
return $this->belongsTo('App\Round','round_id');
}
public function Client()
{
return $this->belongsTo('App\Client','client_id');
}
}
圆形
class Round extends Model
{
protected $dates = [
'created_at',
'updated_at',
'date_scheduled',
'date_finished'
];
public function Clients()
{
return $this->hasMany('App\RoundClients', 'round_id');
}
public function Jobs()
{
return $this->belongsToMany('App\Job', 'job_rounds', 'round_id', 'job_id');
}
}
工作轮次
class JobRound extends Model
{
public $timestamps = false;
}
在我的回合视图中,我正在输出所有不在回合中的工作以及所有在回合中的工作。
我通过创建一个 DB::table 来执行检查来做到这一点 - 请参阅我的代码:
public function show($id)
{
$round = Auth::user()->rounds()->FindOrFail($id);
$not = DB::table('jobs')->whereNotIn('id', function($query) use($round) {
$query->select('job_id')
->from('job_rounds')
->where('round_id', $round->id);
})->get();
$are = DB::table('job_rounds')
->join('jobs', 'job_rounds.job_id', '=', 'jobs.id')
->select('job_rounds.*', 'jobs.*' ,'job_rounds.id as DAS')
->where('job_rounds.round_id',$round->id)
->get();
return view('app.round',compact('round','not','are'));
}
在我看来,我遇到的问题是,用于输出客户端名称的客户端到作业的关系将不起作用,因为我创建了自己的数据库查询,我正在输出我的视图中的客户端信息,例如
工作机会
@foreach($are as $job)
{{ $job->client->first_name }}
@endforeach
工作不全面
@foreach($not as $job)
{{ $job->client->first_name }}
@endforeach
我得到错误:
未找到变量 $client 等
【问题讨论】:
-
你定义了模型的关系吗?你能发布每个模型文件吗
-
@Carlos 我不熟悉在关系中这样做,我已经包含了上面的模型。
-
为什么不使用基本的数据库表级关系?
-
@Sachith 因为工作可能与许多轮次有关。
-
如果使用普通的数据库关系方式,每个job都有一个client,那么每个job round都有一个job.so自动job round和client关系建立。
标签: php laravel laravel-5 eloquent