-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
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
Summarize on many-to-many relationship in Relationship Manager results in a SQL ERROR: SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'id' #12501
Comments
@GekkeGlennDev Hi! You can check here why this happens #12403 (comment) in your case you need to change your code to // This cause the SQL error:
->summarize(Tables\Columns\Summarizers\Sum::make()->using(
fn(Builder $builder) => $this->getOwnerRecord()->products()->sum('products.price')
)) |
Thank you @dmitry-udod for a solution that may work for now, I only had to change the name of the column of sum to But I see this as a quick fix and think it should not be the case for a default flow when using many-to-many with pivot columns. But that is my opinion. At least thanks for a fix! |
@GekkeGlennDev No problem. Yeah, I agree with you that this is a quick fix, not a solution. |
Workaround for this very specific case implemented in #12821 |
@danharrin Thank you for your effort. I have updated the Reproduction repository to the newest version of the filament v3 package (v3.2.83) |
@GekkeGlennDev I have not released the PR yet |
Apologies, ignore me, I will have a look this week |
Hay @danharrin did you already looked into this issue? |
The issue was that I couldn't get your Docker container working because of a network issue, so I used Valet instead with SQLite to check it out quickly. It works there, but not in MySQL/Maria. |
I don't think I know how to fix this. The following code has no errors: SELECT
`order_product`.`order_id` AS `pivot_order_id`,
`order_product`.`product_id` AS `pivot_product_id`,
`order_product`.`quantity` AS `pivot_quantity`,
`order_product`.`price` AS `pivot_price`,
`order_product`.*,
`products`.*
FROM
`products`
INNER JOIN `order_product` ON `products`.`id` = `order_product`.`product_id`
WHERE
`order_product`.`order_id` = 1 Whereas this one has the duplicate col: SELECT
sum(`pivot_price`) AS aggregate
FROM (
SELECT
`order_product`.`order_id` AS `pivot_order_id`,
`order_product`.`product_id` AS `pivot_product_id`,
`order_product`.`quantity` AS `pivot_quantity`,
`order_product`.`price` AS `pivot_price`,
`order_product`.*,
`products`.*
FROM
`products`
INNER JOIN `order_product` ON `products`.`id` = `order_product`.`product_id`
WHERE
`order_product`.`order_id` = 1) AS `products` The only difference is that we are using the tables in a subquery in the second, but the code we added does not even reference the ID and the ID column from the pivot and products table does not clash |
I've opened #13626 which removes the selection of the pivot table from the subquery, hopefully this doesn't cause other issues |
Package
filament/filament
Package Version
v3.2.71
Laravel Version
v11.4.0
Livewire Version
v3.4.10
PHP Version
v8.3.6
Problem description
In a RelationshipManager::table() I defined some columns to display on the detail page of the parent model.
Now, there are some numbers in it for knowing the amount of a product.
When I call
->summarize(Sum::make())
on a numeric column, it throws the SQL Exception:SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'id'
Expected behavior
Instead of throwing a SQL Exception, I should get the summarized amount of all the entries in that table.
Steps to reproduce
php artisan make:filament-resource OrderResource -G
php artisan make:filament-relation-manager OrderResource products title
->summerize()
on the numeric column.Reproduction repository
https://github.com/GekkeGlennDev/filament-sql-issue
Relevant log output
Donate 💰 to fund this issue
The text was updated successfully, but these errors were encountered: