2017-12-18 20 views
0

게시물이 있으며이 게시물은 나중에 읽을 수 있도록 사용자가 저장할 수 있습니다. 이 관계를 만들었으므로 쉽게 저장하거나 삭제할 수 있습니다. 문제는 게시물이 저장되었는지 또는 프론트 엔드에 있는지 확인할 수 없습니다. 이제는 이것을 처리 할 코드를 작성했지만 작동하지 않습니다. 여기 내 컨트롤러 코드 :사용자가 게시물과 관계가 있는지 확인하려고하는 Laravel

$articleFlag = 1; 
$userID = Auth::User()->id; 

if (count($bestarticles) > 0) { 
    foreach ($bestarticles as $bestarticle) { 
     $saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle); 

     if (count($saveddata) > 0) { 
      $articleFlag = 1; 
     } else { 
      $articleFlag = 2; 
     } 
    } //foeach endes here 
} //first if endes here 

내가 검사보다보기로 $articleFlag 전달보다 그것은 if 와 값의 그러나 문제는 아무리 내가 if (count($bestarticles) > 0) true를 반환 할 내가보기에 값 1을 무엇을 얻을, 없다 . 내가 누락 된 부분이있는 사람이 있습니까?

은 여기 내 사용자 컨트롤러 relationshio입니다 :

function savedarticle(){ 
    return $this->belongsToMany('App\User', 'savearticle', 'user_id', 
    'article_id'); 
    } 

여기에 내가 저장 및 삭제에 사용하는 기능 간다 :

function savethearticle(Article $article){ 
    $this->savedarticle()->syncWithoutDetaching([$article->id]); 
} 
function removethearticle(Article $article){ 
    $this->savedarticle()->detach([$article->id]); 
} 

을하지만 당신은 걱정할 필요가 아무것도를. 삭제하고 추가 할 수 있습니다.

또는보기에서 기존 관계를 확인하거나 더 나은 방법으로 컨트롤러에서 확인하고보기로 전달할 수있는 다른 방법이 있습니까?

저는 Laravel 5.4를 사용하고 있습니다.

+0

더 읽기 쉽게 만들어 주셔서 감사합니다. 내 머리 글자가 요즘 잘 작동하지 않는다./ – Nikonah

+0

'User' 모델과'Article' 모델을 게시하여 두 모델 간의 관계를 볼 수 있습니까? – fubar

+0

@fubar 나는 그것을 추가했다. 하지만 이미 삭제하고 추가 할 수 있습니다. 문제는 없습니다. 나는 사용자가 게시물을 이미 저장했는지 여부에 따라 저장 또는 삭제 버튼을 표시 할 수 없습니다. – Nikonah

답변

1

할 경우, 당신은이 User 여부에 관련이 있는지 여부를 결정하기 위해 노력하고 있습니다.

그렇다면 원래 Article 모델을 쿼리 할 때 User 관계를로드하는 것이 좋습니다. 이는 Article 당 하나의 쿼리가 아닌 하나의 쿼리를 사용하여 관계를로드하는 이점이 있습니다. 이 Collection

$userId = Auth::id(); 

$articles = Article::with(['savedarticle' => function ($query) use ($userId) { 
    return $query->where('user_id' => $userId); 
}])->get(); 

, 우리가 특별히로드 현재 User 인증 있기 때문에, 당신은 다음 savedarticle 관계, 1count이있는 경우 User 관계가 존재한다는 것을 알고 진행할 수 있습니다.

foreach ($articles as $article) { 
    if ($article->savedarticle->count()) { 
     // User has already saved article 
    } else { 
     // User has not saved article 
    } 
} 
+0

이것은 민감한 방법으로 보입니다. 나는 그것을 시도해보고 올바르게 작동하는 경우 올바른 답을 표시 할 것입니다. – Nikonah

+0

나는 그걸 가지고 놀아야 만했습니다. – Nikonah

+0

당신은 천만에요. – fubar

1

Where 절에 bestarticle의 ID를 전달하지 않아야합니까? 또한 실제로 데이터베이스에 요청을 시작하고 쿼리를 실행하려면 -> get()이 필요합니다.

$saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle); 

당신이 Collection Article의 모델을 가지고있는 것처럼 그것은 보인다

$saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle->id)->get(); 
+0

그래도 놓치지는 않았지만 여전히 작동하지 않습니다. – Nikonah

+0

여전히 값 1이 표시되는데 이는 액티비티가 작동하지 않을 때 게시물이 저장된다는 것을 의미합니다. – Nikonah

+0

그 라인에 -> get()을 추가 한 다음 dd ($ saveddata)를 사용하여 그 카운트가 더 큰 이유를 확인하십시오 당신이 그것을 0으로 기대한다면 0보다.반환되는 것은 무엇입니까? –