是否可以将值与where子句中的collection属性进行比较?

时间:2017-12-13 22:19:58

标签: php laravel laravel-5.5

所以,我有三张桌子:'汽车','hotlaptimes'和'tyrestemperature'。可以说我正在实时感知轮胎温度。我想在一个视图中显示最佳的热圈时间,以及那个热圈的平均轮胎温度。我仍然找不到解决方案来获取轮胎温度。表'汽车'是“父亲”,在'hotlaptimes'和'tyrestemperature'上有'cars_id'字段。模特:

function derniereLigneColCC() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Commande");
  var startRow = '1'; // ligne départ = 1, modifiable si besoin
  var valColonneB = sheet.getRange("B1:B").getValues(); 
  var lignesColonneB = valColonneB.filter(String).length; 
  var activer = sheet.getRange(lignesColonneB + 6, 2).activate(); // activer dans la colonne B la dernière cellule non vide
  var Inscrire = activer.setValue("High");
}

这是我在控制器上最接近的方法:

class Car extends Model
{
    protected $table = "cars";

        public function hotlaptimes(){
           return $this->hasMany('App\Hotlap');
        }
        public function tyrestemperature(){
           return $this->hasMany('App\Tyretemp');
        }
} 
class Hotlap extends Model
{
    protected $table = "hotlaptimes";
    public function car(){
        return $this->belongsTo('App\Car');
    }
}
class Tyretemp extends Model
{
    protected $table = "tyrestemperature";
    public function car(){
        return $this->belongsTo('App\Car');
    }
}

我得到一个错误,说明此集合实例上不存在Property [id]。

我敢肯定这不是不可能的,我一定是错过了什么。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

  

我想在一个视图中显示最佳的热圈时间,以及该热圈的平均轮胎温度。

如果您尝试使用car检索best hot lap time,这就是您接近它的方式:

$best_hot_lap = Hotlap::with("car")
                    ->orderBy("time", "ASC")
                    ->groupBy("cars_id")
                    ->first();

然后,您可以只使用cars_id的{​​{1}}属性来检索best_hot_lap

Tyretemp

或使用$temp = Tyretemp::where("cars_id", $best_hot_lap->cars_id)->get(); 模型中的Car关系

Hotlap

答案 1 :(得分:0)

您是否尝试过使用预先加载? laravel文档中有一节" Relationships"。
我现在无法进行测试,只有很小的休息时间,但也许可以尝试像

这样的东西
$bestlap = Hotlap::with('car.tyrestemperature')->sortBy('time')->first();
dump($bestlap->car->tyrestemperature->avg('temperature'));

它应该装载最好的一圈,并加载相应的汽车和轮胎温度

编辑
我才意识到你只想要温度,而不是一圈......

Temperature::where('car_id', function($query) {
    return $query->select('car_id')->from(with(new Hotlap())->getTable())->sortBy('time')->first();
})->get();

这将获得car_id的温度集合,我们将通过获取hotlap表的第一个条目的car_id(选择部分)按时间排序。 我想你可以独自在那里工作。

相关问题