Comments (7)
Define two separate relationships and combine them with an accessor:
class DeviceModel extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function products()
{
return $this->hasManyJson('App\Product\Product', 'compatible_device_models_ids');
}
public function getProductVariantsAttribute()
{
$productVariants = $this->products->pluck('variants')->flatten();
return new \Illuminate\Database\Eloquent\Collection($productVariants);
}
}
class Product extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
protected $casts = [
'compatible_device_models_ids' => 'json',
];
public function variants()
{
return $this->hasMany('App\Product\ProductVariant', 'product_id');
}
}
Device::find($id)->productVariants;
Use eager loading to prevent unnecessary queries:
Device::with('products.variants')->find($id)->productVariants;
from eloquent-json-relations.
I released a new version that adds support for HasManyThroughJson
relationships (Laravel 9+):
https://github.com/staudenmeir/eloquent-json-relations#has-many-through-relationships
class DeviceModel extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function productVariants()
{
return $this->hasManyThroughJson(
ProductVariant::class, Product::class, new JsonKey('compatible_device_models_ids'), 'product_id'
);
}
}
from eloquent-json-relations.
What do your tables look like?
from eloquent-json-relations.
Basically;
Model # 1 : Device Model
'App\Device\DeviceModel'
id
I need to query all the "Compatible ProductVariant Model # 3 " through the product (Model # 2)
Model # 2 : Product
'App\Product\Product'
id
compatible_devices_models_ids <--- JSON
`
public function variants()
{
return $this->hasMany('App\Product\ProductVariant', 'product_id');
}
public function compatible_device_models()
{
return $this->belongsToJson('App\Device\DeviceModel', 'compatible_device_models_ids');
}
`
Model # 3 : Product Variant
'App\Product\ProductVariant'
id
product_id
public function product() { return $this->belongsTo('App\Product\Product', 'product_id'); }
from eloquent-json-relations.
This is not supported at the moment. I'll look into it.
from eloquent-json-relations.
I don't think I'll add this relationship type anytime soon. The implementation would be quite complex and I don't see that many use cases.
In the meantime, you can imitate it by combining a HasManyJson
and a HasMany
relationship.
from eloquent-json-relations.
Can you provide an example of a combination of HasManyJson
and HasMany
for me and other people looking for a similar solution :)?
Feel free to close this issue! Thanks again for the help!
from eloquent-json-relations.
Related Issues (20)
- pivot always return the same data on belongsToJson HOT 3
- Support for filtering by pivot value? HOT 5
- Support for custom key HOT 1
- BelongsToJson returns wrong results HOT 2
- hasMany - belongsToJson - hasManyJson HOT 4
- Artisan model:show failed HOT 1
- Need a basic Understanding for a json_encoded column HOT 6
- getAttribute() conflict HOT 1
- SqliteGrammar / Sqlite support HOT 11
- laravel compoships HOT 4
- Defining Json Relation in factory definition HOT 3
- Not an issue, really need a help HOT 2
- Nested Array of Objects throws array_key_exists(): Argument #2 ($array) must be of type array, null given HOT 2
- has and WhereHas doesn't work HOT 1
- One dimensional array HOT 5
- MySQL MEMBER OF () performance improvements HOT 5
- Is it possible to define a relationship using a key that can be nested at variable depths? HOT 14
- Great Package HOT 1
- String values fail for belongsToJson and HasManyJson HOT 4
- Many To Many Eager Loading Breaks with array_key_exists(): Argument #2 ($array) must be of type array, null given HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from eloquent-json-relations.