概述:
我有这个方法getDailyTimeRecordEntry()
public function getDailyTimeRecordEntry($record_id = false) {
$user_id = Auth::user()->id;
$dtr = DailyTimeRecord::where('id', '=', $record_id)
->where('user_id', '=', $user_id);
if ($dtr->count() > 0) {
$dtr = $dtr->first();
} else if ($dtr->count() == 0 && $record_id != false) {
// If other user accessing someone's record id, will redirect
return Redirect::route('dashboard-shinra')
->with('failure', 'The hell are you accessing someone\'s record?');
}
// if the dtr->count() is 0 or has a value it still send the data to view
return View::make('dashboard.shinra.dtr_entry')
->with('dtr', $dtr);
}
因此,我们知道该网址是否具有记录ID参数或空白,它仍会发送我传递给视图的dtr
值
没有参数:
www.mydomain.com/dashboard/shinra/daily-time-record-entry
带参数:
www.mydomain.com/dashboard/shinra/daily-time-record-entry/2
所以在视图dashboard.shinra.dtr_entry
我有一行代码,其中包含dtr
个变量。
<input type="text" name="date" value="{{ ($dtr->date) ? $dtr->date : '' }}">
所以,如果我们访问
www.mydomain.com/dashboard/shinra/daily-time-record-entry/1
所有记录都将在文本字段中输出,如上面的输入。因为参数1
在数据库中有记录。
所以,如果我访问
www.mydomain.com/dashboard/shinra/daily-time-record-entry
没有参数,我遇到了错误
我知道这是因为这个
{{ ($dtr->date) ? $dtr->date : '' }}
但是,有没有解决这个问题?
我甚至尝试过
{{ (isset($dtr->date)) ? $dtr->date : '' }}
仍然无法工作。
答案 0 :(得分:1)
在您的方法getDailyTimeRecordEntry()
中,您还应该在($dtr->count() == 0 && $record_id == false)
为$record_id
时处理案例false
。否则,您可能会遇到get()
或first()
$dtr
查询的情况。
所以你应该:
public function getDailyTimeRecordEntry($record_id = false) {
$user_id = Auth::user()->id;
$dtr = DailyTimeRecord::where('id', '=', $record_id)
->where('user_id', '=', $user_id);
if ($dtr->count() > 0) {
$dtr = $dtr->first();
} else if ($dtr->count() == 0 && $record_id != false) {
// If other user accessing someone's record id, will redirect
return Redirect::route('dashboard-shinra')
->with('failure', 'The hell are you accessing someone\'s record?');
} else {
// return something or make sure you do $dtr = $dtr->first() here
$dtr = $dtr->first();
}
// if the dtr->count() is 0 or has a value it still send the data to view
return View::make('dashboard.shinra.dtr_entry')
->with('dtr', $dtr);
}
此外,您可以在Blade中为三元运算符使用更简单的语法。而不是写
{{ (isset($dtr->date)) ? $dtr->date : '' }}
你可以写
{{ $dtr->date or '' }}
答案 1 :(得分:1)
问题是边缘情况,当count为0且你从不执行查询时。
首先,我建议适当地命名变量:
$query = DailyTimeRecord::where('id', '=', $record_id)
->where('user_id', '=', $user_id);
...
$dtr = $query->first(); // or whatever
...
return View::make()->with('dtr', $dtr);
然后你就会知道$dtr
没有设置,所以调试非常简单。
现在,您的代码执行不必要的查询:
// 1st query
if ($dtr->count() > 0) {
// 2nd query if passed
$dtr = $dtr->first();
// 2nd query if didn't pass
} else if ($dtr->count() == 0 && $record_id != false) {
虽然你可以像这样简单地做到这一点:
$dtr = DailyTimeRecord::where('id', '=', $record_id)
->where('user_id', '=', $user_id)
->first();
if ( ! count($dtr))
{
return ... // ERROR
}
return ... // correct row returned
答案 2 :(得分:0)
对我而言,如果您没有设置参数,则id将为0.这意味着您将在$ dtr中获取空集合并将该空集合传递给视图。而不是你试图访问你认为是模型的属性,但实际上它是一个集合。
根据没有参数传递给控制器操作时db返回的内容,可能会出现这种情况。