小编Gra*_*edy的帖子

无法获得自动创建联接的说法

如果我的问题的答案显而易见,请提前道歉.在我发布这篇文章之前,我已经在研究这个主题时做了尽职调查.

我的大多数框架体验来自使用CodeIgniter,所以我从未有过使用ORM的实践经验.(CI确实有一些现成的ORM解决方案,但我从未使用它们.)

我想在Laravel的Eloquent ORM中使用内置的ORM功能,在运行查询时自动将锦标赛和国家/地区表连接在一起,并返回包含锦标赛数据及其相关国家/地区数据的数据集.

也就是说,我希望Eloquent自动识别外键关系,以便我可以运行查询(例如,Tournament :: with('Country') - > all())将返回整套锦标赛和国家/地区数据.

如果我以一种从未打算使用的方式使用Eloquent,请立即停止我!我的困惑可能更多的是我试图将一个难以维持的解决方案混合在一起而不是语法或编码错误.

查询我想在Eloquent中复制

SELECT * FROM tournaments LEFT JOIN countries ON tournaments.country_id = countries.id
Run Code Online (Sandbox Code Playgroud)

PHP中的预期结果

我希望收到一系列Tournament对象(在PHP中),其中单个Tournament对象如下所示:

  • tournaments.id
  • tournaments.year
  • tournaments.country_id
  • tournaments.created_at
  • tournaments.updated_at
  • countries.id
  • countries.code
  • countries.name
  • countries.url
  • countries.created_at
  • countries.updated_at

我做的失败的尝试失败了

我在虚拟控制器方法中运行了所有这些尝试,并将结果作为格式化字符串输出到分析器.

尝试失败#1:

虚拟控制器中的PHP代码:

$tournaments = Tournament::with('Country')->all();
Run Code Online (Sandbox Code Playgroud)

生成以下查询:

SELECT * FROM `tournaments`
Run Code Online (Sandbox Code Playgroud)

尝试#1返回:

包含Tournament对象的数组,仅包含锦标赛表中的列.

尝试失败#2

虚拟控制器中的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)

php laravel laravel-3

40
推荐指数
1
解决办法
6820
查看次数

在命令行上运行Artisan(Laravel)时出现致命错误

我在(梦幻般的)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 3.2.1
  • 我可以在我的系统上成功运行一个简单的Web应用程序(即我可以将请求路由到控制器并正确加载相关的刀片)
  • 我只是从GitHub下载了Laravel 3.2.1(laravel-laravel-v3.2.1-8-gaae8b62.zip)并将其解压缩到我的服务器上

我的环境:

  • PHPhost共享主机上的PHP 5.3.13
  • FireSSH运行命令

我的根目录:(括号中的权限)

  • / application(775)
  • /捆绑(775)
  • / laravel(775)
  • / public(775)
  • / storage(775)
  • /工匠(664)
  • /paths.php(777)

如果我的相关设置有任何其他详细信息,请告知我们.我真的不确定在解决此问题时有什么帮助.

-

更新:我还将此问题发布到Laravel的GitHub问题跟踪器.(https://github.com/laravel/laravel/issues/820)

php laravel laravel-3

6
推荐指数
2
解决办法
5162
查看次数

Laravel中的异常不渲染视图

问题摘要

我无法让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 3.2.12
  • 共享主机上的PHP 5.3.13
  • Windows 7的
  • Chrome 23(各种其他浏览器的结果相同)

更多信息

还有什么我可以提供的,使这个问题更容易理解或排除故障.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对象的源代码.

laravel

1
推荐指数
1
解决办法
1937
查看次数

标签 统计

laravel ×3

laravel-3 ×2

php ×2