Laravel Query Build 2 таблицы проблем с объединением вопросов (Растворено) - PullRequest
0 голосов
/ 24 февраля 2020

Я не смог найти, как это сделать в Laravel

Я добавил свои таблицы и запрос

Возможно, я выбрал неправильный путь, я был бы очень рад, если бы вы поделились ваши предложения

table order
id      pool_id      durum     tarih
1       1            0         2020-02-24(not start)
2       2            1         2020-02-24(started)
3       1            1         2020-02-24(started)
4       2            0         2020-02-24(not start)

table orderdetail
id      order_id      statu_id     finish
1       2             1            1
2       2             2            0
3       3             1            1
4       3             2            1
5       3             3            0

laravel код;

        $orders= Order::where('pool_id',$pool)
        ->leftJoin('orderdetails', function ($join) {
                $join->on('orderdetails.order_id', '=', 'orders.id')
                        ->where('durum','=','1')
                        ->where('orderdetails.statu_id','<=','2')
                        ->where('orderdetails.finish','=','0');
                    ->where('durum','=','0')
        ->whereDate('tarih', '>', Carbon::now()->subDays(2)->toDateString())
        ->whereDate('tarih', '<', Carbon::now()->addDays(1)->toDateString())
        ->select('orders.*')
        ->distinct()
        ->get(); 

как это сделать, как показано ниже

    if(durum == 1){
       join and condition (statu_id and finish) success get only order row
    }
    if(durum == 0){
       get only order row
    }

спасибо за ваш интерес Эндрю Ларсен

порядок миграции

      Schema::create('orders', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('orderno')->unique();
    $table->unsignedBigInteger('pool_id');
    $table->foreign('pool_id')->references('id')->on('pools')->onDelete('cascade');
    $table->unsignedBigInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users');
    $table->unsignedBigInteger('grup_id');
    $table->foreign('grup_id')->references('id')->on('testgroups');
    $table->string('vardiya');
    $table->string('tanim')->default(0);//0: plansız-1:planlı
    $table->string('durum')->default(0);//0: beklemede - 1: işlem başladı - 2: işlem bitti - 3: iptal
    $table->timestamps();
  });

порядок миграции детали

     Schema::create('orderdetails', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('order_id');
    $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade')->onDelete('cascade');
    $table->unsignedBigInteger('test_id');
    $table->foreign('test_id')->references('id')->on('tests');
    $table->unsignedBigInteger('statu_id');
    $table->foreign('statu_id')->references('id')->on('status');
    $table->unsignedBigInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users');
    $table->string('finish')->default(0);
    $table->timestamps();
  });

модель заказа

class Order extends Model
{
  function getPool(){
    return $this->belongsTo('App\Models\Pool','pool_id','id');
  }
  function getTestgroup(){
    return $this->hasOne('App\Models\Testgroup','id','grup_id');
  }

  public function user()
  {
      return $this->belongsTo('App\User', 'user_id');
  }

  public function getDetay()
  {
    return $this->hasMany('App\Models\Orderdetail','order_id')
        ->where('statu_id','<=','2')->where('finish','<=','0')->first();
  }
}

модель заказа детали

class Orderdetail extends Model
{
  public function getOrder(){
    return $this->belongsTo('App\Models\Order','order_id');
  }

  public function getPool(){
    return $this->hasOneThrough(
      'App\Models\Pool',
      'App\Models\Order',
      'id', // Foreign key on users table...
      'id', // Foreign key on history table...
      'order_id', // Local key on suppliers table...
      'pool_id' // Local key on users table...
    );
  }

}

спасибо всем

1 Ответ

0 голосов
/ 24 февраля 2020

Если вы добавите эту функцию в модель заказа:

public function orderDetails() {
    return $this->hasMany('App\Models\Orderdetail', 'order_id');
}

Этот код должен делать то же самое, что и ваш код, за исключением того, что этот код использует eloquent вместо построителя запросов (код не тестировался):

$orders = Order::where([
    ['pool_id', $pool],
    ['tarih', '>', Carbon::now()->subDays(2)->toDateString()],
    ['tarih', '<', Carbon::now()->addDays(1)->toDateString()]
])
->where(function($q) {
    $q->where(function($q2) {
        $q2->where('durum', 1)
        ->whereHas('orderDetails', function($q3) {
            $q3->where([
                ['statu_id', '<=', 2],
                ['finish', 0]
            ]);
        });
    })
    ->orWhere('durum', 0);
})
->get();

Также в файле миграции столбцы durum и finish также определены как строки, но вы используете их как целые числа. Если вам нужны только цифры c, вы должны определить их как целые числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...