我是Laravel的新手,正在建立一个小项目作为我的学校。我已经解决了上述错误,我似乎无法修复它。任何帮助表示赞赏。
在我的控制器中,我在第一次加载页面时进行以下调用。 getDetails
方法在页面加载时非常有效,但在用Ajax调用它时失败并出现上述错误,因为用户在加载后与页面交互。
在页面加载时,方法被调用并传递给它,从而得到早期其他方法调用($CSpec[0]->id
和$CSize[0]->size_mm
的结果值,我可以将其视为值1
和{{1} })如下:
0.5
同样在控制器中,我有以下函数,该函数通过Ajax调用中使用的路径触发:
$CD = CS::getDetails($CSpec[0]->id, $CSize[0]->size_mm);
public function itemDetails($ct, $cs)
{
return CS::getDetails($ct, $s);
}
方法如下所示:
getDetails
我有这条路线:
public static function getDetails($ct, $cs)
{
return DB::table('recommend_view')
->where('recommend_view.id', '=', $ct)
->where('recommend_view.size_mm', '=', $cs)
->first();
}
当我使用Ajax调用相同的方法时,它会因上述错误而失败。 Ajax代码在Route::get('vd/cd/{cd}/{cs}',
['uses' => 'Application\VDController@itemDetails', 'as' => 'application.vdcdetails']);
调用中生成以下URL:
$.getJSON
如果http://my.app/vd/cd/1/0.5
在dd()
内为每个变量,我可以看到从url / controller传递给方法的正确值。
如果我在MySQL Workbench中执行查询,它按预期工作:
getDetails
因此,当在初始页面加载时调用该方法时,该方法可以直接从其他方法调用直接提供给它,但是当通过URL / Ajax传递变量时,它失败了,我似乎无法理解其中的区别。 / p>
select *
from `recommender_view`
where `recommender_view`.`ct_id` = 1
and `recommender_view`.`cs_size_mm` = 0.50
limit 1;
答案 0 :(得分:1)
我相信我知道你的问题是什么,但是,请随时纠正我。
你正在使用的是Laravel查询构建器,它在PHP中返回一个stdClass对象类型,假设它找到了查询的结果集。这实际上是一个愚蠢的"没有方法的对象" echo"或返回。你不能转换为数组,也不能转换为json等。
因此,当Laravel响应对象试图处理它时,它不能使用__toString()方法来解构相应的响应。
您最好做的是针对扩展Illuminate Eloquent Model类的Model调用查询。
在这种情况下,它可能是这样的
CableRecommenderView::where('recommend_view.id', $ct)
->where('recommend_view.size_mm', $cs)
->first();
Eloquent在传递给响应对象时能够做出相应的响应。
作为一个FYI,当使用equals(' =')作为查询Eloquent中的比较运算符时(可能还有查询构建器,尽管你必须检查它),你可以放弃在 - > where()子句中明确定义它,并简单地将比较变量作为第二个参数传递。
希望有所帮助!
答案 1 :(得分:0)
ajax调用希望将响应传递给它。它无法识别您尝试传递给它的对象。
查看创建回复http://laravel.com/docs/5.1/responses。
如果你返回一个json响应,例如
public function itemDetails($ct, $cs)
{
$item = CS::getDetails($ct, $s);
return response()->json(['data' => $item]);
}
ajax调用应该有效。然后,您可以从ajax中的数据变量中检索。