思維,接受的答案是 「不完整的」。它的顯然轉換髮生 - 如果它工作並返回一些結果。實際上,Eloquent不會將傳遞的值從字符串轉換爲int。您可以在下次\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php
看到:
/**
* Find a model by its primary key.
*
* @param mixed $id
* @param array $columns
* @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|null
*/
public function find($id, $columns = ['*'])
{
if (is_array($id)) {
return $this->findMany($id, $columns);
}
$this->query->where($this->model->getQualifiedKeyName(), '=', $id);
return $this->first($columns);
}
生成器只是增加了在那裏條件與目前的主鍵的名稱。然後它(建設者)編譯所有參數/條件/等。準備好聲明並優化它。在你的情況下,它將是select * from posts where posts.id = ? limit 1
與$bindings
陣列[0 => "1dssadf"]
。你可以看到這一刻在\vendor\laravel\framework\src\Illuminate\Database\Connection.php
(方法select
)。最後,答案是MySQL認識到id應該是一個整數(INT),並自動將字符串「1dssadf」轉換爲整數1(內置行爲),不需要任何(int)...
或CAST(..)
。
如果需要數字,相關轉換將自動進行。這對於我已經使用的大多數(?)語言來說是非常標準的(或者將會是編譯器/解釋器選項),我一直認爲它是允許的,以便單元等(例如10km,15%,12oz)不改變串。 – Giles