どこかでパラメータ付きURLを生成する
$url = route('users.edit', ['user' => $user->id]);
$url = route('users.edit', ['user' => $user]);
第二引数のuserがidでもmodelでも動く理由
結論
route関数を司るDatabase/eloquent/Model.phpにある**$primarykeyで決定する**
$primarykeにidが代入されているため['user' => $user]と書いてもidが参照され、取ることができる

ここまでの過程
どこかでroute関数を定義する。
public function index ()
{
route();
}
このrouteを⌘+クリックすると
laravelのhelper関数が集約されてるところに飛ぶ
ここではフォーマットを整えるぐらい
function route($name, $parameters = [], $absolute = true)
{
return app('url')->route($name, $parameters, $absolute);
}
次にこのapp->のrouteが何かを辿る
ここではgetByNameはよくて、toRouteに飛びます
public function route($name, $parameters = [], $absolute = true)
{
if (! is_null($route = $this->routes->getByName($name))) {
return $this->toRoute($route, $parameters, $absolute);
}
throw new InvalidArgumentException("Route [{$name}] not defined.");
}
次にrouteUrlはいいので、formatParametersに飛びます
protected function toRoute($route, $parameters, $absolute)
{
return $this->routeUrl()->to(
$route, $this->formatParameters($parameters), $absolute
);
}
肝心なのはgetRouteKey()です。
public function formatParameters($parameters)
{
$parameters = Arr::wrap($parameters);
foreach ($parameters as $key => $parameter) {
if ($parameter instanceof UrlRoutable) {
$parameters[$key] = $parameter->getRouteKey();
}
}
return $parameters;
}
コメントアウトされている様にmodelのkeyでvalueをget
そして、UrlRoutabeleがinterfaceされてます。
この親はDatabase/eloquent/Model.phpになるのでそこで、結論が定義されてます。
interface UrlRoutable
{
/**
* Get the value of the model's route key.
*
* @return mixed
*/
public function getRouteKey();
2番目の書き方の注意であり前提
①tableにidが設定されていること
②結論の$primarykeyでidが定義されていること