vscode-intelephense icon indicating copy to clipboard operation
vscode-intelephense copied to clipboard

Laravel model relationships return incorrect types

Open Kerigard opened this issue 5 months ago • 2 comments

Describe the bug

Return types for some methods are not formed correctly when using relationships in Laravel models.

To Reproduce

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model {}
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Post extends Model
{
    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User> 
     */
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }
}
use App\Models\Post;

$user = (new Post())->user()->first(); // object|null
$user = (new Post())->user()->create(); // \Illuminate\Database\Eloquent\Model
$users = (new Post())->user()->get(); // \Illuminate\Database\Eloquent\Collection<int, \App\Models\User>

Expected behavior

$user variable has the correct type

$user = (new Post())->user()->first(); // \App\Models\User|null
$user = (new Post())->user()->create(); // \App\Models\User

Screenshots

sccreenshot-1 sccreenshot-2 sccreenshot-3

Platform and version

  • Windows 11
  • VSCode v1.93.1
  • Intelephense v1.12.6 (Premium)
  • Laravel v11.23.5

Kerigard avatar Sep 21 '24 11:09 Kerigard