OctoberCMS 这应该引发错误吗?

OctoberCMS Should this throw an error?

如果我(错误地)定义了一个 belongsToMany 如下(注意 table 键后的 ]):

public $belongsToMany = [
  'phonetypes' => [
      'NigglesLogic\Suitespots\Models\Phonetype',
      'table' => 'niggleslogic_suitespots_contact_phonetypes'],
      'pivot' => ['phone_number']
];

我可以查看页面并且没有抛出任何错误。但是数据透视表不显示。

如果我将上面的内容更改为这个(在主键后面加上 ],这是我想要的):

public $belongsToMany = [
  'phonetypes' => [
      'NigglesLogic\Suitespots\Models\Phonetype',
      'table' => 'niggleslogic_suitespots_contact_phonetypes',
      'pivot' => ['phone_number']
  ]
];

刷新页面时显示透视数据。

我意识到我输入错误,但我应该让 OctoberCMS 至少警告我这种情况?

嗯,October CMS 的代码结构主要检查配置,如果它的格式不正确,那么它会忽略那个东西。

为什么?:因为October CMS是基于Laravel的,所有关系配置都传递给Laravel然后它会初始化关系。 所以很难预测用户会犯什么样的错误,只使用配置所需的密钥而忽略其余部分是相当容易的。

So in your case: (I have rewritten your code in proper structure)

public $belongsToMany = [
  'phonetypes' => [
     'NigglesLogic\Suitespots\Models\Phonetype',
     'table' => 'niggleslogic_suitespots_contact_phonetypes'
   ],
  'pivot' => ['phone_number']
];

可以看到重组后我们定义了2个关系,一个是phonetypes,另一个是pivot,所以当我们尝试获取其中之一

第一种情况 [phonetypes]:它无法从 table 中找到合适的关系数据,但是 table 存在所以它 returns not an error
在第二种情况下 [pivot] :我们没有使用它,因为我们不认为它是关系,但如果我们尝试使用它,它也不会找到 table phone_number 所以它可能 throw an error.

为了检测错误,我们需要更多预测table 行为。
[ 是的,October CMS 可以向您显示警告,但要显示警告,他们需要编写更多代码,而且如果他们检查所有内容,代码大小似乎会增加一倍:( ]

(我们不能为此显示警告)对于 ex 如果我们定义路由:

Route::get('/som-item', function() { ...code... })

看,我错写了/som-item但是but,我需要用/some-item url 所以 laravel 不能给我警告 作为它的正确路线,它会告诉我 /some-item not defined error 但是它不会告诉我你拼写错误警告:).

[在代码中得到一些 AI 之前我们不会看到警告 :)]