 <blockquote> <p>...when using route model binding, the ids of these resources are turned into models without any knowledge of each other.</p> </blockquote> <p>I am just starting to deal with this and here is how I've decided to make the approach.</p> <ul> <li>Make it easier to check a model's relations <ul> <li>Laravel 5.3 has a method to determine if two models have the same ID and belong to the same table. <a href="https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Model.php#L3043" rel="nofollow"><code>is()</code></a></li> <li>I submitted a <a href="https://github.com/laravel/framework/pull/14493" rel="nofollow">pull request that would add relationship tools</a>. You can see the changes to <code>Illuminate\Database\Eloquent\Model</code> that I am using in my project.</li> </ul></li> <li>Create a middleware for nested routes with model binding.</li> </ul> <p><strong>Middleware</strong></p> <pre class="lang-php prettyprint-override"><code>&lt;?php namespace App\Http\Middleware; use Closure; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Exception\HttpResponseException; /** * Class EntityChain * * Determine if bound models for the route are related to * each other in the order they are nested. * * @package App\Http\Middleware */ class EntityChain { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // Array of the bound models for the route. $parameters = array_filter($request-&gt;route()-&gt;parameters(), function ($v) { if ($v instanceof Model) return true; return false; }); // When there are two or more bound models. if (count($parameters) &gt; 1) { // The first model is the parent. $parent = array_shift($parameters); while (count($parameters) &gt; 0) { // Assume the models are not related. $pass = false; // Set the child model. $child = array_shift($parameters); // Check if the parent model is related to the child. if ($parent-&gt;is_related($child)) { $pass = true; } $parent = $child; // Fail on no relation. if (!$pass) { throw new HttpResponseException(response()-&gt;json('Invalid resource relation chain given.', 406)); } } } return $next($request); } } </code></pre>