我有两个模型:for idx in range(len(regions)):
client.request_spot_instances(
DryRun=False,
SpotPrice=price_bids,
InstanceCount=number_of_instances,
LaunchSpecification=
{
'ImageId': ami_id,
'KeyName': 'matrix',
'SecurityGroupIds': ['sg-5f07f52c'],
'SecurityGroups': ['MatrixSG'],
'InstanceType': machine_type,
'Placement':
{
'AvailabilityZone': regions[idx],
},
},
)
和Holiday
。这些看起来如下:
HolidayInfo
:
Holiday
class Holiday extends Model
{
protected $table = 'holidays';
protected $primaryKey = 'holiday_id';
public $timestamps = false;
public function dates(){
return $this->hasOne('App\HolidayDates', 'holiday_id');
}
public function images(){
return $this->hasMany('App\HolidayImages', 'holiday_id');
}
public function info(){
return $this->hasOne('App\HolidayInfo', 'holiday_id');
}
public function pricing(){
return $this->hasOne('App\HolidayPricing', 'holiday_id');
}
}
:
HolidayInfo
我的桌子:
如何在我的控制器中使用这些模型,同时使用简单的where子句?换句话说,HolidayInfo有一些我需要的信息以及Holiday,但以某种方式执行连接然后执行where语句以缩小数据会更有效。
这是我尝试的但它没有返回正确的数据:
class HolidayInfo extends Model
{
protected $table = 'holiday_info';
public $timestamps = false;
protected $primaryKey = 'holiday_id';
public function holiday(){
return $this->hasOne('App\Holiday', 'holiday_id');
}
}
我也尝试过添加iCoders建议的条件:
$holidays = Holidays::with('info')->get();
返回以下内容,表明尚未执行连接:
Holidays::where('country', $country)->with('info')->get();
国家/地区是'holiday_info'表的一部分。
然而;执行此查询会从Holiday Info Table返回我需要的数据,但它会遗漏Holiday Table数据。
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'country' in 'where clause' (SQL: select * from holidays where country = australia)
运行以下内容后,会显示超过60个结果,因此SQL工作正常而不是laravel:
$holiday_info = Holidays::find(0)->info()->where('country', $country)->get();
如何组合模型/关系及其数据,以便在一个地方使用它?
答案 0 :(得分:2)
Yuo已经在Holiday模型中添加了关系
public function info(){
return $this->hasOne('App\HolidayInfo', 'holiday_id');
}
您可以使用with
Holiday::where(your condition)->with('info')->get();
更新
public function info(){
return $this->hasOne('App\HolidayInfo', 'holiday_id','holiday_id');
}
如果你没有对表字段使用laravel约定,那么你将主键和外键传递给关系
有一个关系
hasOne($related, $foreignKey, $localKey )
答案 1 :(得分:0)
只需使用雄辩的
$holidays = Holiday::where(your condition)->with("info")->get();
然后在获取信息的价值时,只需使用:
foreach($holidays as $holiday){
$holiday->info->youInfoFieldHere
}
答案 2 :(得分:0)
感谢@iCoders帮我解决了这个问题。
问题是public $incrementing = false;
应该在假日模式中设置,因为它是非整数主键。