{"id":105581,"date":"2025-04-11T16:59:41","date_gmt":"2025-04-11T12:29:41","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/how-to-enable-relationship-autoloading-in-versions-before-v128-37lj\/"},"modified":"2025-04-11T16:59:41","modified_gmt":"2025-04-11T12:29:41","slug":"how-to-enable-relationship-autoloading-in-versions-before-v128-37lj","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/how-to-enable-relationship-autoloading-in-versions-before-v128-37lj\/","title":{"rendered":"\u0646\u062d\u0648\u0647 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u062a\u0648\u0622\u0644\u0648\u062f \u0631\u0627\u0628\u0637\u0647 \u062f\u0631 \u0646\u0633\u062e\u0647 \u0647\u0627 \u0642\u0628\u0644 \u0627\u0632 v12.8"},"content":{"rendered":"<div data-article-id=\"2399642\" id=\"article-body\">\n<p><\/p>\n<p>\u0686\u0646\u062f \u0631\u0648\u0632 \u067e\u06cc\u0634 \u060c \u0644\u06cc\u062a\u0648\u06cc\u0646\u0686\u0648\u06a9 \u0631\u0648\u0634 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f <strong><code>withRelationshipAutoloading<\/code><\/strong>  \u062f\u0631 PR #53655. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0627\u062f\u063a\u0627\u0645 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0631\u0648\u0627\u0628\u0637\u06cc \u0631\u0627 \u06a9\u0647 \u062a\u0645\u0627\u0633 \u0645\u06cc \u06af\u06cc\u0631\u06cc\u062f \u0648 \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f \u060c \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f <strong>\u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631<\/strong> \u0628\u0647 \u0622\u0646\u0647\u0627 \u0627\u0644\u0628\u062a\u0647 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0641\u0642\u0637 \u062f\u0631 V12.8 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u062f\u0631 \u0635\u0648\u0631\u062a \u06a9\u0627\u0631 \u0631\u0648\u06cc \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0622\u0646 \u0627\u0632 \u0646\u0633\u062e\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0646\u0633\u062e\u0647 \u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0645. \ud83d\udd25<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0642\u062f\u0645 \u0628\u0647 \u0642\u062f\u0645 \u0628\u0631\u0648\u06cc\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u0645 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u06a9\u0631\u062f\u0645. \ud83d\udc63<\/p>\n<p>\u0627\u0648\u0644 \u060c \u0645\u0627 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u0686\u0646\u062f \u06a9\u0644\u0627\u0633 Laravel \u0631\u0627 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u060c \u0645\u0627\u0646\u0646\u062f <strong>\u0645\u062f\u0644<\/strong>\u0628\u0627 <strong>\u0645\u062c\u0645\u0648\u0639\u0647 \u0641\u0635\u06cc\u062d<\/strong>\u0648\u062a <strong>\u0633\u0627\u0632\u0646\u062f\u0647 \u0641\u0635\u06cc\u062d<\/strong>\u060c \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0628\u0631\u062e\u06cc \u0627\u0632 \u0635\u0641\u0627\u062a.<\/p>\n<p>\u0645\u0627 \u06cc\u06a9 \u067e\u0648\u0634\u0647 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0646\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f <strong>\u0631\u0648\u0646\u0648\u0634\u062a<\/strong> \u062f\u0627\u062e\u0644 \u0641\u0647\u0631\u0633\u062a \u0628\u0631\u0646\u0627\u0645\u0647. \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u060c \u0645\u0627 \u062f\u0648 \u0632\u06cc\u0631 \u067e\u0648\u0634\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u0634\u062a: \u06cc\u06a9\u06cc \u0628\u0647 \u0646\u0627\u0645 <strong>\u06a9\u0644\u0627\u0633<\/strong> \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f <strong>\u0648\u06cc\u0698\u06af\u06cc<\/strong>\u0628\u0634\u0631<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0635\u0641\u0627\u062a \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645. \u0645\u0627 \u06cc\u06a9 \u0645\u0648\u0631\u062f \u062c\u062f\u06cc\u062f \u0628\u0647 \u0646\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f <strong>hasattributes<\/strong>\u0628\u0634\u0631 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u062f\u0631 \u0644\u0627\u0631\u0627\u0648\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u060c \u0627\u0645\u0627 \u0645\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u0646\u0633\u062e\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0632 \u0622\u0646 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0628\u0627 \u0647\u0645\u06cc\u0646 \u0646\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 (\u0627\u06af\u0631\u0686\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0647\u0631 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u06cc\u062f \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f). \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06a9\u062f\u06cc \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Overwrites\\Traits<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">trait<\/span> <span class=\"nc\">HasAttributes<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"cd\">\/**\n     * Get a relationship.\n     *\n     * @param  string  $key\n     * @return mixed\n     *\/<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getRelationValue<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"c1\">\/\/ If the key already exists in the relationships array, it just means the<\/span>\n        <span class=\"c1\">\/\/ relationship has already been loaded, so we'll just return it out of<\/span>\n        <span class=\"c1\">\/\/ here because there is no need to query within the relations twice.<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">relationLoaded<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">relations<\/span><span class=\"p\">[<\/span><span class=\"nv\">$key<\/span><span class=\"p\">];<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isRelation<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">attemptToAutoloadRelation<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">relations<\/span><span class=\"p\">[<\/span><span class=\"nv\">$key<\/span><span class=\"p\">];<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">preventsLazyLoading<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">handleLazyLoadingViolation<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"c1\">\/\/ If the \"attribute\" exists as a method on the model, we will just assume<\/span>\n        <span class=\"c1\">\/\/ it is a relationship and will load and return results from the query<\/span>\n        <span class=\"c1\">\/\/ and hydrate the relationship's value on the \"relationships\" array.<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRelationshipFromMethod<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u0648\u06cc\u0698\u06af\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0628\u0647 \u0646\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <strong>\u062c\u0646\u062c\u0627\u0644<\/strong>\u060c \u0648 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u060c \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code>\n<span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Overwrites\\Traits<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">Closure<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Database\\Eloquent\\Model<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">trait<\/span> <span class=\"nc\">HasRelationships<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"cd\">\/**\n     * The relationship autoloader callback.\n     *\n     * @var \\Closure|null\n     *\/<\/span>\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$relationAutoloadCallback<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"cd\">\/**\n     * Determine if a relationship autoloader callback has been defined.\n     *\n     * @return bool\n     *\/<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">hasRelationAutoloadCallback<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"o\">!<\/span> <span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">relationAutoloadCallback<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"cd\">\/**\n     * Define an automatic relationship autoloader callback for this model and its relations.\n     *\n     * @param  \\Closure  $callback\n     * @param  mixed  $context\n     * @return $this\n     *\/<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">autoloadRelationsUsing<\/span><span class=\"p\">(<\/span><span class=\"kt\">Closure<\/span> <span class=\"nv\">$callback<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$context<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">relationAutoloadCallback<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$callback<\/span><span class=\"p\">;<\/span>\n\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">relations<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$key<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">propagateRelationAutoloadCallbackToRelation<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$context<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"cd\">\/**\n     * Enable relationship autoloading for this model.\n     *\n     * @return $this\n     *\/<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">withRelationshipAutoloading<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">newCollection<\/span><span class=\"p\">([<\/span><span class=\"nv\">$this<\/span><span class=\"p\">])<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">withRelationshipAutoloading<\/span><span class=\"p\">();<\/span>\n\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"cd\">\/**\n     * Attempt to autoload the given relationship using the autoload callback.\n     *\n     * @param  string  $key\n     * @return bool\n     *\/<\/span>\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">attemptToAutoloadRelation<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">hasRelationAutoloadCallback<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">invokeRelationAutoloadCallbackFor<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"p\">[]);<\/span>\n\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">relationLoaded<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"cd\">\/**\n     * Invoke the relationship autoloader callback for the given relationships.\n     *\n     * @param  string  $key\n     * @param  array  $tuples\n     * @return void\n     *\/<\/span>\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">invokeRelationAutoloadCallbackFor<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$tuples<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nv\">$tuples<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">array_merge<\/span><span class=\"p\">([[<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"nb\">get_class<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">)]],<\/span> <span class=\"nv\">$tuples<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"nb\">call_user_func<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">relationAutoloadCallback<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$tuples<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"cd\">\/**\n     * Propagate the relationship autoloader callback to the given related models.\n     *\n     * @param  string  $key\n     * @param  mixed  $values\n     * @param  mixed  $context\n     * @return void\n     *\/<\/span>\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">propagateRelationAutoloadCallbackToRelation<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$models<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$context<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">hasRelationAutoloadCallback<\/span><span class=\"p\">()<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span> <span class=\"nv\">$models<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$models<\/span> <span class=\"k\">instanceof<\/span> <span class=\"nc\">Model<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\n            <span class=\"nv\">$models<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"nv\">$models<\/span><span class=\"p\">];<\/span>\n\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span> <span class=\"nb\">is_iterable<\/span><span class=\"p\">(<\/span><span class=\"nv\">$models<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"nv\">$callback<\/span> <span class=\"o\">=<\/span> <span class=\"k\">fn<\/span><span class=\"p\">(<\/span><span class=\"kt\">array<\/span> <span class=\"nv\">$tuples<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">invokeRelationAutoloadCallbackFor<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$tuples<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$models<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$model<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"c1\">\/\/ Check if relation autoload contexts are different to avoid circular relation autoload...<\/span>\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$context<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span> <span class=\"nv\">$context<\/span> <span class=\"o\">!==<\/span> <span class=\"nv\">$model<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n                <span class=\"nv\">$model<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">autoloadRelationsUsing<\/span><span class=\"p\">(<\/span><span class=\"nv\">$callback<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$context<\/span><span class=\"p\">);<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u060c \u0645\u0627 \u0633\u0641\u0627\u0631\u0634\u06cc \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f <strong>\u0645\u062f\u0644<\/strong> \u06a9\u0644\u0627\u0633. \u0627\u0644\u0628\u062a\u0647 \u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u06af\u0633\u062a\u0631\u0634 \u062e\u0648\u0627\u0647\u062f \u06cc\u0627\u0641\u062a <strong>\u0645\u062f\u0644 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0644\u0627\u0631\u0627\u0648\u0644<\/strong> \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u062a\u0645\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0631\u0627 \u062d\u0641\u0638 \u06a9\u0646\u06cc\u0645. \u0633\u067e\u0633 \u060c \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"kn\">use<\/span> <span class=\"nn\">App\\Overwrites\\Traits\\<\/span><span class=\"p\">{<\/span><span class=\"nc\">HasAttributes<\/span><span class=\"p\">,<\/span> <span class=\"nc\">HasRelationships<\/span><span class=\"p\">};<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Database\\Eloquent\\Model<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">BaseModel<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Model<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">BaseModel<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"kn\">use<\/span> <span class=\"nc\">HasAttributes<\/span><span class=\"p\">,<\/span> <span class=\"nc\">HasRelationships<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"cd\">\/**\n     * Indicates whether relations should be automatically loaded on all models when they are accessed.\n     *\n     * @var bool\n     *\/<\/span>\n    <span class=\"k\">protected<\/span> <span class=\"k\">static<\/span> <span class=\"nv\">$modelsShouldAutomaticallyEagerLoadRelationships<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"cd\">\/**\n     * Determine if model relationships should be automatically eager loaded when accessed.\n     *\n     * @param  bool  $value\n     * @return void\n     *\/<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">static<\/span> <span class=\"k\">function<\/span> <span class=\"n\">automaticallyEagerLoadRelationships<\/span><span class=\"p\">(<\/span><span class=\"nv\">$value<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">static<\/span><span class=\"o\">::<\/span><span class=\"nv\">$modelsShouldAutomaticallyEagerLoadRelationships<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"cd\">\/**\n     * Determine if relationships are being automatically eager loaded when accessed.\n     *\n     * @return bool\n     *\/<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">static<\/span> <span class=\"k\">function<\/span> <span class=\"n\">isAutomaticallyEagerLoadingRelationships<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"k\">static<\/span><span class=\"o\">::<\/span><span class=\"nv\">$modelsShouldAutomaticallyEagerLoadRelationships<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0628\u0631\u0627\u06cc <strong>\u0633\u0627\u0632\u0646\u062f\u0647<\/strong> \u06a9\u0644\u0627\u0633 &#8211; \u0645\u0627 \u0646\u0633\u062e\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Overwrites\\Classes<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Database\\Eloquent\\Builder<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">BaseBuilder<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">Builder<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">BaseBuilder<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"cd\">\/**\n     * Execute the query as a \"select\" statement.\n     *\n     * @param  array|string  $columns\n     * @return \\Illuminate\\Database\\Eloquent\\Collection<int tmodel=\"\">\n     *\/<\/int><\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"nv\">$columns<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">'*'<\/span><span class=\"p\">])<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nv\">$builder<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">applyScopes<\/span><span class=\"p\">();<\/span>\n\n        <span class=\"c1\">\/\/ If we actually found models we will also eager load any relationships that<\/span>\n        <span class=\"c1\">\/\/ have been specified as needing to be eager loaded, which will solve the<\/span>\n        <span class=\"c1\">\/\/ n+1 query issue for the developers to avoid running a lot of queries.<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$models<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$builder<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getModels<\/span><span class=\"p\">(<\/span><span class=\"nv\">$columns<\/span><span class=\"p\">))<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nv\">$models<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$builder<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">eagerLoadRelations<\/span><span class=\"p\">(<\/span><span class=\"nv\">$models<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"nv\">$collection<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$builder<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getModel<\/span><span class=\"p\">()<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">newCollection<\/span><span class=\"p\">(<\/span><span class=\"nv\">$models<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nc\">Model<\/span><span class=\"o\">::<\/span><span class=\"nf\">isAutomaticallyEagerLoadingRelationships<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nv\">$collection<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">withRelationshipAutoloading<\/span><span class=\"p\">();<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">applyAfterQueryCallbacks<\/span><span class=\"p\">(<\/span><span class=\"nv\">$collection<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0628\u0631\u0627\u06cc <strong>\u0645\u062c\u0645\u0648\u0639\u0647<\/strong> \u06a9\u0644\u0627\u0633 \u060c \u0645\u0627 \u0646\u0633\u062e\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Overwrites\\Classes<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Database\\Eloquent\\Collection<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">BaseCollection<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">Collection<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">BaseCollection<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"cd\">\/**\n     * Load a relationship path for models of the given type if it is not already eager loaded.\n     *\n     * @param  array<int class-string=\"\">&gt;  $tuples\n     * @return void\n     *\/<\/int><\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">loadMissingRelationshipChain<\/span><span class=\"p\">(<\/span><span class=\"kt\">array<\/span> <span class=\"nv\">$tuples<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"p\">[<\/span><span class=\"nv\">$relation<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$class<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">array_shift<\/span><span class=\"p\">(<\/span><span class=\"nv\">$tuples<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">filter<\/span><span class=\"p\">(<\/span><span class=\"k\">function<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$model<\/span><span class=\"p\">)<\/span> <span class=\"k\">use<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$relation<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$class<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"o\">!<\/span> <span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$model<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span>\n                <span class=\"o\">!<\/span> <span class=\"nv\">$model<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">relationLoaded<\/span><span class=\"p\">(<\/span><span class=\"nv\">$relation<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span>\n                <span class=\"nv\">$model<\/span><span class=\"o\">::<\/span><span class=\"n\">class<\/span> <span class=\"o\">===<\/span> <span class=\"nv\">$class<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">})<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">load<\/span><span class=\"p\">(<\/span><span class=\"nv\">$relation<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">empty<\/span><span class=\"p\">(<\/span><span class=\"nv\">$tuples<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"nv\">$models<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">pluck<\/span><span class=\"p\">(<\/span><span class=\"nv\">$relation<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">whereNotNull<\/span><span class=\"p\">();<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$models<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">first<\/span><span class=\"p\">()<\/span> <span class=\"k\">instanceof<\/span> <span class=\"nc\">BaseCollection<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nv\">$models<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$models<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">collapse<\/span><span class=\"p\">();<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">static<\/span><span class=\"p\">(<\/span><span class=\"nv\">$models<\/span><span class=\"p\">))<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">loadMissingRelationshipChain<\/span><span class=\"p\">(<\/span><span class=\"nv\">$tuples<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"cd\">\/**\n     * Enable relationship autoloading for all models in this collection.\n     *\n     * @return $this\n     *\/<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">withRelationshipAutoloading<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nv\">$callback<\/span> <span class=\"o\">=<\/span> <span class=\"k\">fn<\/span><span class=\"p\">(<\/span><span class=\"nv\">$tuples<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">loadMissingRelationshipChain<\/span><span class=\"p\">(<\/span><span class=\"nv\">$tuples<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$model<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span> <span class=\"nv\">$model<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">hasRelationAutoloadCallback<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\n                <span class=\"nv\">$model<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">autoloadRelationsUsing<\/span><span class=\"p\">(<\/span><span class=\"nv\">$callback<\/span><span class=\"p\">);<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648 \u0627\u06a9\u0646\u0648\u0646 \u060c \u0645\u0631\u062d\u0644\u0647 \u0622\u062e\u0631: \u0634\u0645\u0627 \u0645\u0637\u0645\u0626\u0646 \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0645\u062f\u0644 \u0647\u0627\u06cc \u0634\u0645\u0627 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc \u06cc\u0627\u0628\u062f <strong>\u0645\u062f\u0644 \u0633\u0641\u0627\u0631\u0634\u06cc<\/strong> \u06a9\u0644\u0627\u0633 \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u0645. \u0647\u0645\u0686\u0646\u06cc\u0646 \u060c \u0627\u0632 \u0644\u0627\u0631\u0627\u0648\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>\u06a9\u0644\u0627\u0633\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<\/strong> \u0645\u0627 \u0633\u0627\u062e\u062a\u06cc\u0645.<\/p>\n<p>\u0634\u0645\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u062f\u0631 \u0647\u0631 \u0645\u062f\u0644\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u06cc\u062f \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f <strong>\u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631<\/strong>\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Models<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">App\\Overwrites\\Classes\\Collection<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">CustomCollection<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">App\\Overwrites\\Classes\\Builder<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">CustomBuilder<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">App\\Overwrites\\Classes\\Model<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">CustomModel<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">Post<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">CustomModel<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"cd\">\/**\n     * The attributes that are mass assignable.\n     *\n     * @var array<int string=\"\">\n     *\/<\/int><\/span>\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$fillable<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n        <span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span>\n        <span class=\"s1\">'body'<\/span><span class=\"p\">,<\/span>\n        <span class=\"s1\">'user_id'<\/span><span class=\"p\">,<\/span>\n        <span class=\"s1\">'is_visible'<\/span><span class=\"p\">,<\/span>\n        <span class=\"s1\">'views'<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">];<\/span>\n\n    <span class=\"cd\">\/**\n     * Create a new Eloquent query builder for the model.\n     *\n     * @param \\Illuminate\\Database\\Query\\Builder $query\n     * @return \\App\\Overwrites\\Builder\n     *\/<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">newEloquentBuilder<\/span><span class=\"p\">(<\/span><span class=\"nv\">$query<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">CustomBuilder<\/span><span class=\"p\">(<\/span><span class=\"nv\">$query<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"cd\">\/**\n     * Create a new Eloquent Collection instance.\n     *\n     * @param  array<array-key>  $models\n     * @return TCollection\n     *\/<\/array-key><\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">newCollection<\/span><span class=\"p\">(<\/span><span class=\"kt\">array<\/span> <span class=\"nv\">$models<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[])<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">CustomCollection<\/span><span class=\"p\">(<\/span><span class=\"nv\">$models<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0633\u062e\u0647 \u0639\u0631\u0628\u06cc \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0644\u0630\u062a \u0628\u0631\u062f\u0646!<\/p>\n<\/blockquote>\n<p>\ud83d\udce5 \u0628\u0631\u0627\u06cc \u0627\u062e\u0628\u0627\u0631 \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u06cc\u062f!<br \/>https:\/\/blog.mmramadan.com\/newsletters<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0686\u0646\u062f \u0631\u0648\u0632 \u067e\u06cc\u0634 \u060c \u0644\u06cc\u062a\u0648\u06cc\u0646\u0686\u0648\u06a9 \u0631\u0648\u0634 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f withRelationshipAutoloading \u062f\u0631 PR #53655. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0627\u062f\u063a\u0627\u0645 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0631\u0648\u0627\u0628\u0637\u06cc \u0631\u0627 \u06a9\u0647 \u062a\u0645\u0627\u0633 \u0645\u06cc \u06af\u06cc\u0631\u06cc\u062f \u0648 \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f \u060c \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647 \u0622\u0646\u0647\u0627 \u0627\u0644\u0628\u062a\u0647 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0641\u0642\u0637 \u062f\u0631 V12.8 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u062f\u0631 \u0635\u0648\u0631\u062a &hellip;<\/p>\n","protected":false},"author":2,"featured_media":105582,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-105581","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/105581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=105581"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/105581\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/105582"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=105581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=105581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=105581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}