【问题标题】:Laravel Eloquent outputs cLaravel Eloquent 输出 c
【发布时间】:2013-02-19 02:32:00
【问题描述】:

我正在使用 Laravel 的 Eloquent,大多数时候没有任何问题。但现在我遇到了一个问题,似乎无法解决它。 Google 没有提供解决方案...

$global_data['credentials']     = Company::find(Auth::user()->company_id)->credentials()->first();

View::share('data', $global_data);

公司模型中的关系:

public function credentials(){
  return $this->has_one('credentials');
}

凭据在每个页面上都回显“c”。 “c”在文档类型之前输出。当我删除凭据行时,“c”消失了。

页面来源:

c<!DOCTYPE html>
<html lang="nl">
<head>

有人吗?

【问题讨论】:

  • 我注意到的是,如果 credentials() 是 has_one(),则不需要 first()。 (我认为)这对你有影响吗?
  • 很遗憾没有。我还将凭据更改为属性而不是函数。所以:Company::find(Auth::user()->company_id)->credentials。我调试了一些,我 100% 确定是这条规则导致“c”显示。

标签: php laravel eloquent laravel-3


【解决方案1】:

老实说,我怀疑 Eloquent 是否与此有关,但可能是代码中某处不幸的“c”。这种情况经常发生,解决办法是一只讨厌的老鼠追逐(在这种情况下是“c”)。

造成这种情况的一个可能原因是文件以 c&lt;?php 开头或以 ?&gt;c 结尾,通常是通过 Autoloader 加载的文件(模型、库和包)。

我敢打赌它在您的凭据模型文件的开头,但也可能在其他地方。如果它不在 Credential.php 中,找到它的一种可能方法是逐步添加与构建 $global_data['credentials'] = .... 行有关的任何内容。

  1. 尝试硬编码凭据,如果没有出现“c”,则可能来自公司或身份验证文件。
  2. 然后尝试执行 Company::find($1)->credentials(),如果没有出现“c”,则可能在您的 Auth 或 User 上(它包含在 Auth 中)。
  3. 一直这样做,直到找到为止。

编辑:

这是因为当 Autoloader 包含一个文件时,PHP 会像在旧样式 PHP 上那样解析它,或者我应该说,就像任何视图一样。

如果您的文件以&lt;?php 开头并以?&gt; 结尾而不是空白行或它们之前或之后的字符,则在 Laravel 的视图渲染之前不会输出任何内容。但是,如果这些文件中有输出,它会进入 PHP 的输出缓冲区并在您的视图之前呈现。

最好始终在第一行使用&lt;?php 打开那些非输出文件,并且永远不要使用?&gt; 关闭它。

【讨论】:

  • 谢谢,现在感觉很蠢。检查了除模型之外的所有内容。 C在那里。谢谢。
  • 真的没什么好傻的。这些小错别字通常是最令人头疼的原因,而且每个人都会遇到。我发现那一个也很难:)
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 2020-04-21
  • 1970-01-01
  • 2016-11-29
相关资源
最近更新 更多