如果我的问题的答案显而易见,请提前道歉.在我发布这篇文章之前,我已经在研究这个主题时做了尽职调查.
我的大多数框架体验来自使用CodeIgniter,所以我从未有过使用ORM的实践经验.(CI确实有一些现成的ORM解决方案,但我从未使用它们.)
我想在Laravel的Eloquent ORM中使用内置的ORM功能,在运行查询时自动将锦标赛和国家/地区表连接在一起,并返回包含锦标赛数据及其相关国家/地区数据的数据集.
也就是说,我希望Eloquent自动识别外键关系,以便我可以运行查询(例如,Tournament :: with('Country') - > all())将返回整套锦标赛和国家/地区数据.
如果我以一种从未打算使用的方式使用Eloquent,请立即停止我!我的困惑可能更多的是我试图将一个难以维持的解决方案混合在一起而不是语法或编码错误.
SELECT * FROM tournaments LEFT JOIN countries ON tournaments.country_id = countries.id
Run Code Online (Sandbox Code Playgroud)
我希望收到一系列Tournament对象(在PHP中),其中单个Tournament对象如下所示:
我在虚拟控制器方法中运行了所有这些尝试,并将结果作为格式化字符串输出到分析器.
虚拟控制器中的PHP代码:
$tournaments = Tournament::with('Country')->all();
Run Code Online (Sandbox Code Playgroud)
生成以下查询:
SELECT * FROM `tournaments`
Run Code Online (Sandbox Code Playgroud)
尝试#1返回:
包含Tournament对象的数组,仅包含锦标赛表中的列.
虚拟控制器中的PHP代码:
$tournaments = Tournament::with('Country')->first();
Run Code Online (Sandbox Code Playgroud)
生成以下错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tournament_id' in 'where clause'
SQL: SELECT * FROM `countries` WHERE `tournament_id` IN (?)
Bindings: array ( …Run Code Online (Sandbox Code Playgroud) 我在(梦幻般的)Laravel PHP框架上使用工匠时遇到了致命的错误.
我最近下载了Laravel的v3.2.1,并尝试在artisan所在的目录中运行以下命令行:
php artisan key:generate
Run Code Online (Sandbox Code Playgroud)
这应该在我的applications/application.php文件中为我创建一个随机密钥.(有关此命令的特定参考,请参阅http://laravel.com/docs/artisan/commands.)
但是,当我从shell运行此命令时,我收到以下错误:
Warning: chdir(): No such file or directory (errno 2) in /home/[USERNAME REMOVED]/websites/[DIRECTORY REMOVED]/htdocs/dev/sb4/paths.php on line 62
Parse error: syntax error, unexpected T_STRING in /home/[USERNAME REMOVED]/websites/[DIRECTORY REMOVED]/htdocs/dev/sb4/laravel/core.php on line 1
Run Code Online (Sandbox Code Playgroud)
这就是paths.php第62行的内容:
chdir(__DIR__);
Run Code Online (Sandbox Code Playgroud)
这是core.php的第1行:
<?php namespace Laravel;
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有任何特定的环境,目录或其他权限我应该修改以使工匠启动并运行.
一点背景:
我的环境:
我的根目录:(括号中的权限)
如果我的相关设置有任何其他详细信息,请告知我们.我真的不确定在解决此问题时有什么帮助.
-
更新:我还将此问题发布到Laravel的GitHub问题跟踪器.(https://github.com/laravel/laravel/issues/820)
我无法让Laravel使用Response :: error('500')渲染500默认错误页面(views/error/500.php).
创建一个虚拟控制器并添加以下公共方法:
public function action_index()
{
try
{
throw new Exception;
}
catch(Exception $e)
{
Response::error('500');
}
}
Run Code Online (Sandbox Code Playgroud)
当您运行此路线时,请注意您将收到一个空白页面,标题状态为200,而不是500.
我希望渲染views/error/500.php中的默认500错误页面,并停止执行脚本的其余部分(假设更长的脚本).
具有标题状态200的空白白页被发送到浏览器.
还有什么我可以提供的,使这个问题更容易理解或排除故障.Laravel论坛(http://forums.laravel.io/viewtopic.php?id=2191)上出现了一个类似的(相同的)问题,并且它被证明是一段时间后修复的.
在application/routes.php中,我有500个错误处理程序的以下代码:
Event::listen('500', function()
{
return Response::error('500');
});
Run Code Online (Sandbox Code Playgroud)
您可以在https://github.com/laravel/laravel/blob/master/laravel/response.php上的GitHub上看到Response对象的源代码.