Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error 'undefined relationship' #169

Closed
robman70 opened this issue Aug 5, 2022 · 17 comments
Closed

Error 'undefined relationship' #169

robman70 opened this issue Aug 5, 2022 · 17 comments

Comments

@robman70
Copy link

robman70 commented Aug 5, 2022

Hi,
I found this wonderful package that (theoratically) resolves a big problem but I get an error:

Illuminate\Database\Eloquent\RelationNotFoundException: Call to undefined relationship [ordersPackages] on model [App\Models\Order]

Can someone help me?

Here are my involved models and their relationships:

Order

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function ordersRows()
	{
		return $this->hasMany('App\Models\OrdersRow');
	}

	public function ordersPackages()
	{
		return $this->hasManyDeep(OrdersPackage::class, [OrdersRow::class, OrdersRowPackage::class]);
	}

The problem, obviously, is in ordersPackages()

OrdersRow

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function ordersRowsPackages()
	{
		return $this->hasMany('App\Models\OrdersRowsPackage', 'order_row_id');
	}

OrdersRowsPackage

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function ordersRow()
	{
		return $this->belongsTo('App\Models\OrdersRow', 'order_row_id');
	}
	
	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function ordersPackage()
	{
		return $this->belongsTo('App\Models\OrdersPackage', 'order_package_id');
	}

OrdersPackage

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function ordersRowsPackages()
	{
		return $this->hasMany('App\Models\OrdersRowsPackage', 'order_package_id');
	}
@staudenmeir
Copy link
Owner

Hi @robman70,
What code/query are you executing when you get this error?

@robman70
Copy link
Author

robman70 commented Aug 5, 2022

Here is an excerpt:

			Order::select(
				<some_fields>
			)
				->with([
					'ordersRows' => function ($query) {
						$query
							->where('deleted', 0);
					},
					'ordersPackages' => function ($query) {
						$query
							->where('deleted', 0);
					},
				])

ordersRows works, ordersPackages not

@staudenmeir
Copy link
Owner

Can you share the whole stacktrace of the exception?

@robman70
Copy link
Author

robman70 commented Aug 5, 2022

Illuminate\Database\Eloquent\RelationNotFoundException: Call to undefined relationship [ordersPackages] on model [App\Models\Order]. in file C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\RelationNotFoundException.php on line 35

#0 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(765): Illuminate\Database\Eloquent\RelationNotFoundException::make(Object(App\Models\Order), 'ordersPackages')
#1 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Relations\Relation.php(104): Illuminate\Database\Eloquent\Builder->Illuminate\Database\Eloquent{closure}()
#2 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(767): Illuminate\Database\Eloquent\Relations\Relation::noConstraints(Object(Closure))
#3 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(735): Illuminate\Database\Eloquent\Builder->getRelation('ordersPackages')
#4 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(715): Illuminate\Database\Eloquent\Builder->eagerLoadRelation(Array, 'ordersPackages', Object(Closure))
#5 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(683): Illuminate\Database\Eloquent\Builder->eagerLoadRelations(Array)
#6 C:\laragon\www\plus-one\PlusOneAdmin\app\Http\Controllers\API\OrderController.php(85): Illuminate\Database\Eloquent\Builder->get()
#7 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(54): App\Http\Controllers\API\OrderController->index(Object(Illuminate\Http\Request))
#8 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('index', Array)
#9 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Route.php(268): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\API\OrderController), 'index')
#10 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Route.php(211): Illuminate\Routing\Route->runController()
#11 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(725): Illuminate\Routing\Route->run()
#12 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#13 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#14 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#15 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php(126): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#16 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php(102): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest(Object(Illuminate\Http\Request), Object(Closure), Array)
#17 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php(54): Illuminate\Routing\Middleware\ThrottleRequests->handleRequestUsingNamedLimiter(Object(Illuminate\Http\Request), Object(Closure), 'api', Object(Closure))
#18 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), 'api')
#19 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authenticate.php(44): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#20 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure), 'sanctum')
#21 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#22 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(726): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#23 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(703): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#24 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(667): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#25 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(656): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#26 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(167): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#27 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}(Object(Illuminate\Http\Request))
#28 C:\laragon\www\plus-one\PlusOneAdmin\vendor\livewire\livewire\src\DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#29 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Livewire\DisableBrowserCache->handle(Object(Illuminate\Http\Request), Object(Closure))
#30 C:\laragon\www\plus-one\PlusOneAdmin\vendor\barryvdh\laravel-debugbar\src\Middleware\InjectDebugbar.php(60): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#31 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Barryvdh\Debugbar\Middleware\InjectDebugbar->handle(Object(Illuminate\Http\Request), Object(Closure))
#32 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#33 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#36 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#38 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#39 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#40 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#41 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#42 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Http\Middleware\HandleCors.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#43 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Http\Middleware\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#44 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Http\Middleware\TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#45 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#46 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#47 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(142): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#48 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#49 C:\laragon\www\plus-one\PlusOneAdmin\public\index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#50 {main}

@robman70
Copy link
Author

robman70 commented Aug 5, 2022

I'm using Laravel 9

@staudenmeir
Copy link
Owner

Can you share the whole Order model? What columns does the orders table have?

Does Order::find($id)->ordersPackageswork?

@robman70
Copy link
Author

robman70 commented Aug 6, 2022

ops ... I noticed now that your library declaration is unused.

I declared it under the namespace, outside the class (with and without leading backslash).
If I declare it within the class, it doesn't find it (I have noticed now).
But the package seems ok, it's in my composer.json and I see the folder inside 'vendor'.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;

/**
 * @property integer $id
 * @property integer $customer_id
 * @property integer $merchant_id
 * @property integer $destination_warehouse_id
 * @property integer $payment_type_id
 * @property integer $shipment_status_id
 * @property integer $created_by
 * @property integer $updated_by
 * @property integer $number
 * @property string $date
 * @property integer $invoice_requested
 * @property string $payment_date_time
 * @property string $payment_transaction
 * @property string $barcode
 * @property string $created_at
 * @property string $updated_at
 * @property boolean $deleted
 * @property Document[] $documents
 * @property Entity $merchant
 * @property Entity $customer
 * @property Entity $destination_warehouse
 * @property PaymentType $paymentType
 * @property ShipmentStatus $ShipmentStatus
 * @property User $created_by
 * @property User $updated_by
 * @property OrdersRow[] $ordersRows
 * @property OrdersPackage[] $ordersPackages
 */
class Order extends Model
{
	/**
	 * @var array
	 */
	protected $fillable = ['customer_id', 'merchant_id', 'destination_warehouse_id', 'payment_type_id', 'shipment_status_id', 'created_by', 'updated_by', 'number', 'date', 'invoice_requested', 'payment_date_time', 'payment_transaction', 'barcode', 'created_at', 'updated_at', 'deleted'];

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function documents()
	{
		return $this->hasMany('App\Models\Document');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function merchant()
	{
		return $this->belongsTo('App\Models\Entity', 'merchant_id');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function customer()
	{
		return $this->belongsTo('App\Models\Entity', 'customer_id');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function destination_warehouse()
	{
		return $this->belongsTo('App\Models\Entity', 'destination_warehouse_id');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function paymentType()
	{
		return $this->belongsTo('App\Models\PaymentType');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function created_by()
	{
		return $this->belongsTo('App\Models\User', 'created_by');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function ShipmentStatus()
	{
		return $this->belongsTo('App\Models\ShipmentStatus', 'shipment_status_id');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function updated_by()
	{
		return $this->belongsTo('App\Models\User', 'updated_by');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function ordersRows()
	{
		return $this->hasMany('App\Models\OrdersRow');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function tripStops()
	{
		return $this->hasMany('App\Models\TripsStop', 'merchant_id');
	}

	/**
	 * Giro sul quale si trova un ordine (attraverso il merchant)
	 */
	public function trip()
	{
		return $this->hasManyThrough(
			Trip::class,
			TripsStop::class,
			'merchant_id',
			'id',
			'merchant_id',
			'trip_id'
		);
	}

	/*
		'App\Post',
		'App\User',
		'country_id', // Foreign key on users table...
		'user_id', // Foreign key on posts table...
		'id', // Local key on countries table...
		'id' // Local key on users table...
	*/

	public function ordersPackages()
	{
		//return $this->hasManyDeep('App\Models\OrdersPackage', ['App\Models\OrdersRow', 'App\Models\OrdersRowPackage']);
		return $this->hasManyDeep(OrdersPackage::class, [OrdersRow::class, OrdersRowPackage::class]);

		//->where('orders_packages.deleted', 0)->where('orders_rows_packages.deleted', 0)->where('orders_rows.deleted', 0)
	}
}

@staudenmeir
Copy link
Owner

If I declare it within the class, it doesn't find it (I have noticed now).

What's the error message?

But the package seems ok, it's in my composer.json and I see the folder inside 'vendor'.

Does the package show up in composer show?

@robman70
Copy link
Author

robman70 commented Aug 8, 2022

If I declare it within the class, it doesn't find it (I have noticed now).

What's the error message?

Undefined type Staudenmeir\EloquentHasManyDeep\HasRelationships

But the package seems ok, it's in my composer.json and I see the folder inside 'vendor'.

Does the package show up in composer show?

Yes

@staudenmeir
Copy link
Owner

Undefined type Staudenmeir\EloquentHasManyDeep\HasRelationships

What does the whole Order file look like when you get this error?

@robman70
Copy link
Author

robman70 commented Aug 8, 2022

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

/**
 * @property integer $id
 * @property integer $customer_id
 * @property integer $merchant_id
 * @property integer $destination_warehouse_id
 * @property integer $payment_type_id
 * @property integer $shipment_status_id
 * @property integer $created_by
 * @property integer $updated_by
 * @property integer $number
 * @property string $date
 * @property integer $invoice_requested
 * @property string $payment_date_time
 * @property string $payment_transaction
 * @property string $barcode
 * @property string $created_at
 * @property string $updated_at
 * @property boolean $deleted
 * @property Document[] $documents
 * @property Entity $merchant
 * @property Entity $customer
 * @property Entity $destination_warehouse
 * @property PaymentType $paymentType
 * @property ShipmentStatus $ShipmentStatus
 * @property User $created_by
 * @property User $updated_by
 * @property OrdersRow[] $ordersRows
 * @property OrdersPackage[] $ordersPackages
 */
class Order extends Model

{
	use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

	/**
	 * @var array
	 */
	protected $fillable = ['customer_id', 'merchant_id', 'destination_warehouse_id', 'payment_type_id', 'shipment_status_id', 'created_by', 'updated_by', 'number', 'date', 'invoice_requested', 'payment_date_time', 'payment_transaction', 'barcode', 'created_at', 'updated_at', 'deleted'];

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function documents()
	{
		return $this->hasMany('App\Models\Document');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function merchant()
	{
		return $this->belongsTo('App\Models\Entity', 'merchant_id');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function customer()
	{
		return $this->belongsTo('App\Models\Entity', 'customer_id');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function destination_warehouse()
	{
		return $this->belongsTo('App\Models\Entity', 'destination_warehouse_id');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function paymentType()
	{
		return $this->belongsTo('App\Models\PaymentType');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function created_by()
	{
		return $this->belongsTo('App\Models\User', 'created_by');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function ShipmentStatus()
	{
		return $this->belongsTo('App\Models\ShipmentStatus', 'shipment_status_id');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function updated_by()
	{
		return $this->belongsTo('App\Models\User', 'updated_by');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function ordersRows()
	{
		return $this->hasMany('App\Models\OrdersRow');
	}

	/**
	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
	 */
	public function tripStops()
	{
		return $this->hasMany('App\Models\TripsStop', 'merchant_id');
	}

	/**
	 * Giro sul quale si trova un ordine (attraverso il merchant)
	 */
	public function trip()
	{
		return $this->hasManyThrough(
			Trip::class,
			TripsStop::class,
			'merchant_id',
			'id',
			'merchant_id',
			'trip_id'
		);
	}

	/*
		'App\Post',
		'App\User',
		'country_id', // Foreign key on users table...
		'user_id', // Foreign key on posts table...
		'id', // Local key on countries table...
		'id' // Local key on users table...
	*/

	/*
	public function ordersPackages()
	{
		//return $this->hasManyDeep('App\Models\OrdersPackage', ['App\Models\OrdersRow', 'App\Models\OrdersRowPackage']);
		return $this->hasManyDeep(OrdersPackage::class, [OrdersRow::class, OrdersRowPackage::class]);

		//->where('orders_packages.deleted', 0)->where('orders_rows_packages.deleted', 0)->where('orders_rows.deleted', 0)
	}
	*/
}

@robman70
Copy link
Author

robman70 commented Aug 8, 2022

use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
With or without the leading backslash, same error.
And if I move this row after the namespace declaration, the resource is not used

@staudenmeir
Copy link
Owner

Undefined type Staudenmeir\EloquentHasManyDeep\HasRelationships

Please the full stacktrace of this error.

@robman70
Copy link
Author

robman70 commented Aug 8, 2022

There is no stacktrace for this particular error: I see this error in VS Code, in design mode, not in runnig mode.

If I try to run a request to (for example) Order::find($id)->ordersPackages, I see this stacktrace:

Error: Class &quot;App\Models\OrdersRowPackage&quot; not found in file C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasRelationships.php on line 770

#0 C:\laragon\www\plus-one\PlusOneAdmin\vendor\staudenmeir\eloquent-has-many-deep\src\HasRelationships.php(86): Illuminate\Database\Eloquent\Model-&gt;newRelatedThroughInstance(&#039;App\\Models\\Orde...&#039;)
#1 [internal function]: App\Models\Order-&gt;Staudenmeir\EloquentHasManyDeep\{closure}(&#039;App\\Models\\Orde...&#039;)
#2 C:\laragon\www\plus-one\PlusOneAdmin\vendor\staudenmeir\eloquent-has-many-deep\src\HasRelationships.php(81): array_map(Object(Closure), Array)
#3 C:\laragon\www\plus-one\PlusOneAdmin\vendor\staudenmeir\eloquent-has-many-deep\src\HasRelationships.php(64): App\Models\Order-&gt;hasOneOrManyDeepThroughParents(Array)
#4 C:\laragon\www\plus-one\PlusOneAdmin\vendor\staudenmeir\eloquent-has-many-deep\src\HasRelationships.php(27): App\Models\Order-&gt;hasOneOrManyDeep(&#039;App\\Models\\Orde...&#039;, Array, Array, Array)
#5 C:\laragon\www\plus-one\PlusOneAdmin\app\Models\Order.php(153): App\Models\Order-&gt;hasManyDeep(&#039;App\\Models\\Orde...&#039;, Array)
#6 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(542): App\Models\Order-&gt;ordersPackages()
#7 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(494): Illuminate\Database\Eloquent\Model-&gt;getRelationshipFromMethod(&#039;ordersPackages&#039;)
#8 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(443): Illuminate\Database\Eloquent\Model-&gt;getRelationValue(&#039;ordersPackages&#039;)
#9 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(2064): Illuminate\Database\Eloquent\Model-&gt;getAttribute(&#039;ordersPackages&#039;)
#10 C:\laragon\www\plus-one\PlusOneAdmin\app\Http\Controllers\API\OrderController.php(30): Illuminate\Database\Eloquent\Model-&gt;__get(&#039;ordersPackages&#039;)
#11 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(54): App\Http\Controllers\API\OrderController-&gt;test(Object(Illuminate\Http\Request), &#039;28&#039;)
#12 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(45): Illuminate\Routing\Controller-&gt;callAction(&#039;test&#039;, Array)
#13 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Route.php(268): Illuminate\Routing\ControllerDispatcher-&gt;dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\API\OrderController), &#039;test&#039;)
#14 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Route.php(211): Illuminate\Routing\Route-&gt;runController()
#15 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(725): Illuminate\Routing\Route-&gt;run()
#16 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Routing\Router-&gt;Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#17 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#19 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php(126): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php(102): Illuminate\Routing\Middleware\ThrottleRequests-&gt;handleRequest(Object(Illuminate\Http\Request), Object(Closure), Array)
#21 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php(54): Illuminate\Routing\Middleware\ThrottleRequests-&gt;handleRequestUsingNamedLimiter(Object(Illuminate\Http\Request), Object(Closure), &#039;api&#039;, Object(Closure))
#22 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Routing\Middleware\ThrottleRequests-&gt;handle(Object(Illuminate\Http\Request), Object(Closure), &#039;api&#039;)
#23 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authenticate.php(44): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#24 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Auth\Middleware\Authenticate-&gt;handle(Object(Illuminate\Http\Request), Object(Closure), &#039;sanctum&#039;)
#25 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#26 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(726): Illuminate\Pipeline\Pipeline-&gt;then(Object(Closure))
#27 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(703): Illuminate\Routing\Router-&gt;runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#28 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(667): Illuminate\Routing\Router-&gt;runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#29 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(656): Illuminate\Routing\Router-&gt;dispatchToRoute(Object(Illuminate\Http\Request))
#30 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(167): Illuminate\Routing\Router-&gt;dispatch(Object(Illuminate\Http\Request))
#31 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Foundation\Http\Kernel-&gt;Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#32 C:\laragon\www\plus-one\PlusOneAdmin\vendor\livewire\livewire\src\DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Livewire\DisableBrowserCache-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#34 C:\laragon\www\plus-one\PlusOneAdmin\vendor\barryvdh\laravel-debugbar\src\Middleware\InjectDebugbar.php(60): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#35 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Barryvdh\Debugbar\Middleware\InjectDebugbar-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#36 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#37 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#38 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#39 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#40 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#41 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#42 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#43 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#44 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#46 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Http\Middleware\HandleCors.php(62): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#47 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Http\Middleware\HandleCors-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#48 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Http\Middleware\TrustProxies.php(39): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#49 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies-&gt;handle(Object(Illuminate\Http\Request), Object(Closure))
#50 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#51 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(142): Illuminate\Pipeline\Pipeline-&gt;then(Object(Closure))
#52 C:\laragon\www\plus-one\PlusOneAdmin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(111): Illuminate\Foundation\Http\Kernel-&gt;sendRequestThroughRouter(Object(Illuminate\Http\Request))
#53 C:\laragon\www\plus-one\PlusOneAdmin\public\index.php(52): Illuminate\Foundation\Http\Kernel-&gt;handle(Object(Illuminate\Http\Request))
#54 {main}

@staudenmeir
Copy link
Owner

There is no stacktrace for this particular error: I see this error in VS Code, in design mode, not in runnig mode.

That's actually a huge difference, the error in VS Code is meaningless here.

Error: Class "App\Models\OrdersRowPackage" not found

You are mixing OrdersRowPackage and OrdersRowsPackage (with an "s") in your code.

@robman70
Copy link
Author

robman70 commented Aug 8, 2022

oh, no ...! What an ugly and stupid mistake!
I apologize and thank you very much, your help was really precious, thank you very much!
Now I have to fix something because it still doesn't work but the biggest problem I think was what you found

@robman70 robman70 closed this as completed Aug 8, 2022
@robman70
Copy link
Author

robman70 commented Aug 9, 2022

Now it works, thanks again!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants