লারাভেল: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: 1055 ত্রুটি


93

ফলাফল আনতে আমি একই কোয়েরিতে হুইথইন এবং গ্রুপবাই ব্যবহার করতে চাই।

আমি এটি চেষ্টা করেছি:

$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();

তবে আমি এই ত্রুটি বার্তা পেয়েছি:

এসকিউএলস্টেট [৪২০০০]: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: 1055 'sbrtpt.loading.id' গ্রুপ দ্বারা নেই (এসকিউএল: যানবাহন_নো দ্বারা গ্রুপ (14, 15, 16) গ্রুপে আইডি লোড করা থেকে নির্বাচন করুন)


আপনার গ্রুপবাই এবং এর চারদিকে বিবৃতিগুলিতে স্যুইচ করুন
অ্যানবার

এটি @ অ্যানবারের কাজ করছে না
কার্তিকভিজয়েন্দি

আপনি আপনার পুরো ত্রুটি বার্তা মুদ্রণ করতে পারেন?
অ্যানবার 18

এসকিউএলসেট [৪২০০০]: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: 1055 'sbrtpt.loading.id' গ্রুপ দ্বারা নেই (এসকিউএল: loadingযেখানে idথেকে (১৪, ১৫, ১)) গ্রুপে আছেন vehicle_no) @ অ্যানবার
কার্তিকভিজয়েনই

উত্তর:


212

সংক্ষিপ্ত উত্তর

ইন config\database.php-> "mysql"অ্যারে

'strict' => falseসমস্ত অক্ষম সেট করুন ।

.... বা

আপনি বিকল্পটিতে 'strict' => trueমোডগুলি ছেড়ে যেতে এবং যুক্ত করতে পারেন"mysql"

'mysql' => [
       ...
       ....
       'strict' => true,
       'modes' => [
            //'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
            'STRICT_TRANS_TABLES',
            'NO_ZERO_IN_DATE',
            'NO_ZERO_DATE',
            'ERROR_FOR_DIVISION_BY_ZERO',
            'NO_AUTO_CREATE_USER',
            'NO_ENGINE_SUBSTITUTION'
        ],
 ]

বিস্তারিত উত্তর

আপনার সমস্ত কড়া বিকল্পগুলি অক্ষম করার প্রয়োজন হতে পারে না ... দয়া করে এই সমস্যা সম্পর্কে এই উত্তরটি দেখুন ।


4
একটি দুর্দান্ত সমাধানের জন্য ধন্যবাদ। এই ইস্যুতে আমার 3 ঘন্টা মারা গেছে
সারওয়ার জাহান

লারাভেলটিতে আমরা কীভাবে এই কঠোর মোডটিকে মিথ্যাতে সেট করতে পারি? দয়া করে আমাকে সহায়তা করুন
বিকাশ চৌহান

@ ভিকাসচৌহান, দুঃখিত আমি এর আগে ওরাকল ব্যবহার করিনি
হুসাম 13'19

4
এই কাজ !!! সেটিংটি পরিবর্তন করার পরেও যে কেউ এখনও একই ত্রুটি পেয়েছে তার জন্য কনফিগার ক্যাশে সাফ করার চেষ্টা করুনphp artisan config:cache
Altin

এই ধরণের কঠোর কোডেড কাজের বিষয়ে আমার উদ্বেগটি হ'ল আমি একরকম প্রযুক্তিগত debtণ অনুভব করি যা আমাকে রাতে ভাল ঘুমায় না, কারণ আমার মাথায় যে ধরণের প্রশ্ন ভেসে উঠবে তা এই জাতীয় হবে: লারাভেল এবং যখন ঘটে তখন কী ঘটে / অথবা মাইএসকিউএল স্পেকের পরিবর্তনগুলি modes(যেমন অ্যারেগুলিতে নির্দিষ্ট কিছু মোডের সংযোজন / অপসারণ, বা আরও খারাপ, সেই অ্যারে পরিবর্তনগুলিতে নির্দিষ্ট মোডগুলির একটির নাম) wr সুতরাং, আমি ঠিক ছেড়ে চলেছি strict=trueএবং কোনও modeজিনিস স্পর্শ করব না । আমি বরং এই জাতীয় কঠোর সেটিংয়ের সাথে কাজ করার জন্য আমার কোড আপডেট করব। ThisPractice === SleepWellEveryNight:)
দামিলোলা ওলুওকেরে

106

এটি সম্ভবত একটি এসকিউএল_মোডি সমস্যা। আপনার config/database.php, সংযোগে, পরিবর্তন করুন

strict => false

হিসাবে হিসাবে

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

4
এই পদ্ধতিতে কোনও
অ্যান্টিওও

আমি বিশ্বাস করি এটি নিরাপদ বা এটি অক্ষম করার জন্য আপনার কাছে লারাভেলের কোনও বিকল্প নেই।
আন্তোনিও কার্লোস রিবেইরো

10

কনফিগার \ ডাটাবেস.এফপি ফাইল পরিবর্তন না করে

সেট'strict' => false মধ্যে config\database.phpএকটি হতে পারে সুরক্ষা সমস্যা । সুতরাং, একটি সহজ লারাভেল সমাধান প্রথম কলget()groupBy('vehicle_no) হতে পারে এবং তারপরে :

$loadids = explode("#@*", $reciptdet->loading_id);
$loadingdatas = DB::table('loading')->whereIn('id', $loadids)->get();
$grouped = $loadingdatas->groupBy('vehicle_no');

'কড়া' => মিথ্যা বললে আমি সঠিক ফলাফল পেতে পারি না। তাহলে কোয়েরিতে যখন আপনি গ্রুপের ডেটা চেষ্টা করেন তবে এই সমাধানটি ভাল কাজ করে। উত্তরের জন্য ধন্যবাদ.
ইরেশান প্যাথিরানা

6

যখনই গোষ্ঠীবদ্ধভাবে গ্রুপবাই ব্যবহার করুন, সর্বদা নির্বাচন () ফাংশনে গ্রুপবাই ফাংশনে ব্যবহৃত কলামের নাম অন্তর্ভুক্ত করুন।

$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->select('vehicle_no')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();//add select('vehicle_no')

কনফিগ ফাইলে কঠোর মোড অক্ষম করাও একটি খারাপ অভ্যাস। এটি করার ফলে কোনও সতর্কতা ছাড়াই অবৈধ তারিখের মতো ডেটাবেস প্রবেশের জন্য দুর্নীতিগ্রস্থ ডেটা হতে পারে absolutely একেবারে প্রয়োজনীয় না হলে এটি করবেন না।


-> নির্বাচন ('কলাম') এর সংযোজন আমার পক্ষে কাজ করেছে। ধন্যবাদ বন্ধু :)
শান

5

আমিও এই সমস্যা হচ্ছে হলেও পরে পরিবর্তন 'strict' => true, এর 'strict' => false , ত্রুটি উধাও হয়ে গেছে।

আপনি এই সেটিংটি এতে খুঁজে পেতে পারেন:

কনফিগারেশন \ ডাটাবেস.এফপি

'mysql' => [
    ...
    'strict' => false,
    ...
]

লারাভেলে ওরাকল সংযোগের জন্য আমরা কীভাবে এটি করতে পারি
বিকাশ চৌহান

3

হালনাগাদ config/database.php

সেট:

'mysql' => [
           'strict' => false,
        ],

পরিবর্তে:

'mysql' => [
           'strict' => true,
        ],

এবং ক্যাশে সাফ করতে ভুলবেন না:

php artisan config:cache

আমি যদি আপনাকে এক হাজারবার ভোট দিতে পারি তবে ২০১ 2016 সালে জবাব দেওয়া হবে। এটির কোনও ক্যাশ না হওয়া ছাড়া প্রায় 24 ঘন্টা এটির সাথে পিটুনি দেওয়া। তোমাকে ভালোবাসি মানুষ <3
ফয়সাল মেহমুদ আওয়ান

2

আপনি যখন GROUP BYমাইএসকিউএল ব্যবহার করেন তখন এই সীমাবদ্ধতাটি বোঝায় , এটি ব্যবহৃত কলামগুলিতে প্রতিটি মানের জন্য একটি সারি দেয়GROUP BY । সুতরাং, নির্বাচিত সারিগুলিতে অন্যান্য কলামগুলির মানগুলি কোথাও ব্যবহার করার জন্য অর্থবোধ করে না। সুতরাং, সর্বদা সেরা অনুশীলনটি ব্যবহার করার পরামর্শ দেওয়া হয় এবং আমি মাইএসকিউএল স্ট্রাইক মোডটি অক্ষম না করার পরামর্শ দেব।

প্রায়শই বিকাশকারীদের কলামের মান অনুসারে একটি কোয়েরির সারি প্রয়োজন হতে পারে। এখানে কলামগুলির অনন্য মান অনুযায়ী তাদের কেবল একটি সারি প্রয়োজন নেই। তবে তাদের একটি নির্দিষ্ট কলামের অনন্য মান দ্বারা গোষ্ঠীযুক্ত একাধিক সারি প্রয়োজন। কিছু কারণে তারা groupByলারাভেলের কোয়েরি বিল্ডার পদ্ধতি ব্যবহার করে যা একটি মাইএসকিউএল GROUP BYকোয়েরি উত্পন্ন করে এবং বিকাশকারীরা উপরের ত্রুটির মুখোমুখি হন।

তাদের সমস্যার সমাধান groupByপরিবর্তে সংগ্রহের পদ্ধতি ব্যবহার করা use উদাহরণ স্বরূপ,

$loadingData = DB::table('loading')
    ->whereIn('id', $loadIds)
    ->get()
    ->groupBy('vehicle_no');

এটি তাদের পছন্দসই ফলাফল দেবে।


0

আপনি পাশাপাশি ব্যবহার করতে পারেন:

স্বতন্ত্র ('যানবাহন_না')

গ্রুপবাইয়ের পরিবর্তে ('যানবাহন_না') প্রতিটি ক্ষেত্রে দৃশ্যপট আলাদা, তবে আপনার ক্যোয়ারীর দিকে তাকালে আলাদা করে যাওয়ার উপায় হতে পারে যেহেতু আপনি ডেটা একত্রিত করছেন না।


-1

যোগ \Schema::defaultStringLength(191);করার জন্য bootপদ্ধতি

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
         \Schema::defaultStringLength(191);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.