2016-03-10 2 views
0

Здравствуйте,, все из всех стран. Мне нужен SQL-запрос, преобразованный в LARAVEL 4.2 потому что у меня еще нет опыта управления им, мои собственные!Запрос SQL Microsoft на Laravel 4.2

SQL, в с Microsoft SQL Server 2008

SELECT TOP(10) logst_data, LogSt_date, LogSt_studid FROM Home_LogStudents WHERE logst_action = 225 AND LogSt_sectionID = 257 AND LogSt_date IN (SELECT MIN(LogSt_date) FROM Home_LogStudents WHERE logst_data <> '0' AND logst_action = 225 AND LogSt_sectionID = 257 AND (LogSt_studid IN (select home_id FROM Hw_StudentClasses INNER JOIN Home_Students ON home_studid = Stclass_studid WHERE Stclass_classid = (129))) GROUP BY LogSt_studid) ORDER BY LogSt_data DESC

все, что я мог бы сделать это на следующей картинке: enter image description here но $ ид и $ class_id не распознается в $ query .... ТАКЖЕ КОД:

$users = DB::Table('Home_LogStudents') 
      ->select('LogSt_data','LogSt_date','LogSt_studid') 
      ->where('LogSt_action','=',225) 
      ->where('LogSt_sectionID','=',$id) 
      ->whereIn('LogSt_date',function($query){ 
       $query->select('LogSt_date') 
         ->from('Home_LogStudents') 
         ->where('LogSt_data','!=',0) 
         ->where('LogSt_action','=',225) 
         ->where('LogSt_sectionID','=',$id) 
         ->whereIn('LogSt_studid',function($query){ 
          $query->select('home_id') 
            ->from('Hw_StudentClasses') 
            ->join('Home_Students','Home_Students.home_studid','=','Hw_StudentClasses.Stclass_studid') 
            ->where('Stclass_classid','=',$class_id); 
          } 
         ) 
       ->groupBy('LogSt_studid'); 
       }) 
     ->orderBy('LogSt_data','DESC') 
     ->take(10) 
     ->get(); 

Спасибо заранее и только для поиска!

+0

Я думаю, вы должны разместить свой код здесь вместо картины – hungneox

+0

, но в основном вы должны 'использовать ($ class_id) ', потому что анонимная функция не распознает внешние переменные области видимости. – hungneox

+0

u означает istead из $ query, чтобы поместить $ id в первый подзапрос и во второй подзапрос поставить $ class_id? –

ответ

0

Так я нашел ответ, это было легко, так что все, что я делал, было использовать Raw Query вызвать запрос был слишком сложен, чтобы перевести его на Laravel или, может быть, я не мог сделать это, так что я сделал это .. ...

$users = DB::select('SELECT  TOP (10) Home_LogStudents.LogSt_data, Home_LogStudents.LogSt_date, Home_LogStudents.LogSt_studid, Home_Students.home_firstname, Home_Students.home_lastname 
FROM   Home_LogStudents 
INNER JOIN Home_Students 
ON Home_LogStudents.LogSt_studid = Home_Students.home_id 
WHERE  (Home_LogStudents.LogSt_action = 225) 
AND (Home_LogStudents.LogSt_sectionID = '.$id.') 
AND (Home_LogStudents.LogSt_date IN 
          (SELECT  MIN(LogSt_date) AS Expr1 
          FROM   Home_LogStudents AS Home_LogStudents_1 
          WHERE  (LogSt_data <> \'0\') 
          AND (LogSt_action = 225) 
          AND (LogSt_sectionID = '.$id.') AND (LogSt_studid IN 
                 (SELECT  Home_Students_1.home_id 
                 FROM   Hw_StudentClasses INNER JOIN 
                       Home_Students AS Home_Students_1 
                 ON Home_Students_1.home_studid = Hw_StudentClasses.Stclass_studid 
                 WHERE  (Hw_StudentClasses.Stclass_classid = ' .$class_id.'))) 
          GROUP BY LogSt_studid)) 
ORDER BY Home_LogStudents.LogSt_data DESC 
'); 

на самом деле я использовал вне струны $ ид и $ class_id с помощью . $ ID. и '. $ Class_id.'

Я надеюсь, что это помогает вам, так и для сложных запросов ... просто использовать RAW ЗАПРОСОВ

1

Я не тестировал его, но вам нужно передать аргумент $id, $class_id в анонимную функцию.

$users = DB::Table('Home_LogStudents') 
      ->select('LogSt_data','LogSt_date','LogSt_studid') 
      ->where('LogSt_action','=', 225) 
      ->where('LogSt_sectionID','=', $id) 
      ->whereIn('LogSt_date', function($query) use($id, $class_id) { 
       return $query->select('LogSt_date') 
        ->from('Home_LogStudents') 
        ->where('LogSt_data','!=', 0) 
        ->where('LogSt_action','=', 225) 
        ->where('LogSt_sectionID','=', $id) 
        ->whereIn('LogSt_studid', function($query) use($class_id){ 
         return $query->select('home_id') 
          ->from('Hw_StudentClasses') 
          ->join('Home_Students','Home_Students.home_studid','=','Hw_StudentClasses.Stclass_studid') 
          ->where('Stclass_classid','=', $class_id); 
         } 
        ) 
       ->groupBy('LogSt_studid'); 
       }) 
     ->orderBy('LogSt_data','DESC') 
     ->take(10) 
     ->get(); 
+0

Хорошо, я сделал это, но теперь он говорит _Undefined свойство: stdClass :: $ home_firstname_ я использую ** home_firstname ** из ** Home_Students ** table в моем _blade view_, это была точка доступа к информации из двух разных таблиц для результатов теста для конкретного ** $ id ** = теста конкретного ** $ class_id ** = class :( –

+0

Я не уверен, но вам нужно var_dump результат одной строки. Я думаю, что результат - это массив, а не объект. так что вы можете попробовать '$ row ['home_firstname']' вместо '$ row-> home_firstname'? – hungneox

+0

Есть ли подобная команда вроде ** «Выберите MIN» ** SQL Server для Laravel? Все я знаю его ** take() ** и ** first(); ** –

Смежные вопросы